python基於opencv 實現影像時鐘
這篇文章主要介紹了python基於opencv 實現影像時鐘的方法,幫助大家更好的理解和使用python,感興趣的朋友可以瞭解下
解決方案詳解
繪製錶盤
錶盤上只有60條分/秒刻線和12條小時刻線,當然還有錶盤的外部輪廓圓,也就是重點在如何畫72根線。先把簡單的圓畫出來:
import cv2 as cv
import math
import datetime
import numpy as np
margin = 5 # 上下左右邊距
radius = 220 # 圓的半徑
center = (center_x, center_y) = (225, 225) # 圓心
# 1. 新建一個畫板並填充成白色
img = np.zeros((450, 450, 3), np.uint8)
img[:] = (255, 255, 255)
# 2. 畫出圓盤
cv.circle(img, center, radius, (0, 0, 0), thickness=5)
我們使用OpenCV畫直線的時候,需知道直線的起點和終點座標,那麼畫72根線就變成了獲取72組座標。
平面座標系下,已知半徑和角度的話,A點的座標可以表示為:
x=r×cosα
y=r×sinα
先只考慮將座標系原點移動到左上角,角度依然是平面座標系中的逆時針計算,那麼新座標是:
x=r+r×cosα
y=r+r×sinα
對於60條分/秒刻線,刻線間的夾角是360°/60=6°,對於小時刻線,角度是360°/12=30°,這樣就得到了72組起點座標,那怎麼得到終點座標呢?其實同樣的原理,用一個同心的小圓來計算得到B點:
通過A/B兩點就可以畫出直線:
pt1 = []
# 3. 畫出60條秒和分鐘的刻線
for i in range(60):
# 最外部圓,計算A點
x1 = center_x+(radius-margin)*math.cos(i*6*np.pi/180.0)
y1 = center_y+(radius-margin)*math.sin(i*6*np.pi/180.0)
pt1.append((int(x1), int(y1)))
# 同心小圓,計算B點
x2 = center_x+(radius-15)*math.cos(i*6*np.pi/180.0)
y2 = center_y+(radius-15)*math.sin(i*6*np.pi/180.0)
cv.line(img, pt1[i], (int(x2), int(y2)), (0, 0, 0), thickness=2)
# 4. 畫出12條小時的刻線
for i in range(12):
# 12條小時刻線應該更長一點
x = center_x+(radius-25)*math.cos(i*30*np.pi/180.0)
y = center_y+(radius-25)*math.sin(i*30*np.pi/180.0)
# 這裡用到了前面的pt1
cv.line(img, pt1[i*5], (int(x), int(y)), (0, 0, 0), thickness=5)
# 到這裡基本的錶盤圖就已經畫出來了
角度換算
接下來算是一個小難點,首先時鐘的起始座標在正常二維座標系的90°方向,其次時鐘跟影像一樣,都是順時針計算角度的,所以三者需要統一下:
因為角度是完全對稱的,順逆時針沒有影響,所以平面座標系完全不用理會,放在這裡只是便於大家理解。對於時鐘座標和影像座標,時鐘0的0°對應影像的270°,時鐘15的90°對應影像的360°,時鐘30的180°對應影像的450°(360°+90°)…
所以兩者之間的關係便是:
計算角度 = 時鐘角度+270°
計算角度 = 計算角度 if 計算角度<=360° else 計算角度-360°
同步時間
Python中如何獲取當前時間和新增日期文字都比較簡單,看程式碼就行,我就不解釋了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
相關文章
- 【影像處理】基於OpenCV實現影像直方圖的原理OpenCV直方圖
- 基於Tensorflow + Opencv 實現CNN自定義影像分類OpenCVCNN
- 《OpenCV 4.5計算機視覺開發實戰:基於Python》OpenCV影像處理入門書OpenCV計算機視覺Python
- 基於Opencv的簡單影像處理OpenCV
- opencv-python 影像 二OpenCVPython
- 基於opencv實現簡單人臉檢測OpenCV
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV
- 基於OpenCV和dlib的人臉交換實現探究OpenCV
- 基於Python實現MapReducePython
- Python 影像處理 OpenCV (16):影像直方圖PythonOpenCV直方圖
- Python 影像處理 OpenCV (14):影像金字塔PythonOpenCV
- 深度學習 + OpenCV,Python實現實時影片目標檢測深度學習OpenCVPython
- OpenCV_python全屏顯示影像OpenCVPython
- Python的OpenCV轉換影像大小PythonOpenCV
- Java + SikuliX 基於影像實現自動化測試Java
- 基於Python實現環形佇列高效定時器Python佇列定時器
- 基於Python的Akka實現Python
- OpenCV特徵提取與影像檢索實現(附程式碼)OpenCV特徵
- 深度學習 + OpenCV,Python實現實時視訊目標檢測深度學習OpenCVPython
- python OpenCV加法操作的實現PythonOpenCV
- Python 影像處理 OpenCV (1):入門PythonOpenCV
- 美團如何基於深度學習實現影像的智慧稽核?深度學習
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- 基於REDIS實現延時任務Redis
- 基於redis實現定時任務Redis
- Python基於TCP實現聊天功能PythonTCP
- 基於python + opencv的影片播放調節功能PythonOpenCV
- 一個基於SpringBoot實現的影像託管程式Spring Boot
- OpenCV與影像處理學習二——影像基礎知識(下)OpenCV
- 用Python實現一個實時運動的大掛鐘效果Python
- PPT 倒數計時時鐘,用 GIF 動畫實現,可直接使用 -- 附 Python 實現程式碼動畫Python
- opencv python 基於KNN的手寫體識別OpenCVPythonKNN
- opencv python 基於SVM的手寫體識別OpenCVPython
- 基於 Serverless+OSS 分分鐘實現圖片秒變素描Server
- 基於Python的Xgboost模型實現Python模型
- 基於面繪製的MC演算法以及基於體繪製的 Ray-casting 實現Dicom影像的三維重建(python實現)演算法ASTPython