用OpenCV畫出時鐘並動態同步系統時間

2021-12-30 05:01:03 字數 1568 閱讀 4188

乙個簡單的時鐘就是線段和圓的組合。包括最外圍的圓,60根刻度線(其中12根整點刻度線)和時針分針秒針三根長的線段。

畫圓最簡單:建立乙個長寬相等的,以中心為中心,以一半的長寬為半徑畫圓即可。

畫線段就相對麻煩許多,因為一共要畫60+12+3=75根線段。opencv的畫線函式line()需要知道線段的起始點,而我們需要畫的75根直線的起始點各不相同,我們需要一一計算出來。如果我們的圓是以我們數學上的笛卡爾座標系的原點為中心,以r為半徑畫的圓,大概就是下面這樣:

已知角度α的情況下我們可以很容易算到p點的座標:

x = r * cos(α)

y = r * sin(α)

但是我們知道opencv中影象的座標原點在左上角,那麼我們可以變化下座標系,得到下面的公式:

x = r + r * cos(α)

y = r + r * sin(α)

一分鐘60秒,秒針刻度就是把外圍的圓60等分,每兩個刻度的夾角是6度。同理整點刻度就是把圓12等分,夾角為30度。

我們可以用半徑相差不大的一大一小兩個圓來算出每一根刻度線的起始點座標,然後就可以用line()畫出它們了。整點刻度同理。

畫出刻度線之後獲取系統時間,然後根據時間實時畫出時針分針秒針。這一部分不太了解,就不多說了。**如下:

#include

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc_c.h"

#include "opencv2/imgproc/imgproc.hpp"

#include

#include

#include

//#include

#include

#include

using namespace std;

using namespace cv;

int main()

//畫整點刻度

vector pt3,pt4;

for (int i = 0; i < 12; i++)

//畫最外圍的圓和圓心的三針連線點

circle(clk, cent, rad, scalar(50, 50, 255, 0), 6, cv_aa, 0); //dreaw outercircle of clock

circle(clk, cent, 2, scalar(0, 255, 0, 0), 5, cv_aa, 0); //draw inner circle

back_up = clk.clone(); // clone to backup image

time_t rawtime;

struct tm * timeinfo;

float second;

float minute;

float hour;

float millisec;

struct timeb tmb;

while (1)

return 0;

}

OpenCV 畫出時鐘並動態同步系統時間

本文是看了網上乙個部落格的例項,覺得很好玩,複製 做了一些修改,調通了之後,做的一些分享。參考原文為 主要修改的地方 1 獲取系統時間 2 秒針更形象的顯示 如果想要看原理的話,詳見本文參考的部落格,這裡不做敘述。下面貼出 供有興趣的人參考。開發環境 vs2013 opencv2.4.9 inclu...

Opencv 找輪廓並畫出相應的矩形

找輪廓參考以下大神的,對於裡面的方法和結果儲存解釋的很清楚 缺少的是畫相應包圍矩形的,其中找矩形用最小外接矩形函式cvminarearect2 cvbox2d rect cvpoint2d32f corners 4 rect cvminarearect2 pcontour,0 cvboxpoints...

用DOS命令打造桌面動態時鐘

經常看到別人的電腦桌面上的側邊欄上有個動態數字時鐘,今天突發奇想,試著用dos命令做了乙個。開啟記事本,輸入以下內容。echo off title 動態時鐘 color 1f mode con cols 20 lines 8 echo.echo 現在的時間是 echo.echo date echo ...