【OpenCV 學習之路】(4)畫出時鐘並動態同步系統時間之一

看到了 @冰不語 有一個時鐘例子,看起來挺酷炫的,馬上實現了下。
先畫一個總體的輪廓。
先看效果:
總體

Talk is cheap,show you the code.

#include<opencv2\core\core.hpp>  
#include<opencv2\highgui\highgui.hpp>  
#include<opencv2\imgproc\imgproc.hpp>  
using namespace cv;
int main()
{
    Mat clock_background(500, 500, CV_8UC3, Scalar::all(0));//創一個背景
    int radius = clock_background.cols / 2;//設半徑
    Point center(clock_background.cols / 2, clock_background.rows / 2);//設圓心
    circle(clock_background, center, radius, Scalar(255, 100, 0), 1, 8, 0);//畫時鐘外輪廓
    circle(clock_background, center, 5, Scalar(0, 0, 255), -1, 8, 0);//畫圓心
    Point second_begin, second_end;//設刻度的起點,終點
    int scale_long = 10;//刻度的長度
    int scale_width = 2;//刻度的寬度
    //畫一個背景
    for (int second_Scale = 0; second_Scale < 60; second_Scale++)
    {
        if (second_Scale % 5 == 0)//每五個刻度就變長度,也就是整點1,2,3,···,12這些數字對應的刻度長一點
        {
            scale_long = 20;
            scale_width = 5;
        }
        else
        {
            scale_long = 10;
            scale_width = 2;
        }
        second_begin.x = center.x + radius * cos(6 * second_Scale* CV_PI / 180);//刻度的起點x座標賦值
        second_begin.y = center.y + radius * sin(6 * second_Scale* CV_PI / 180);//刻度的起點y座標賦值
        second_end.x = center.x + (radius - scale_long) * cos(6 * second_Scale* CV_PI / 180);//刻度的終點x座標賦值
        second_end.y = center.y + (radius - scale_long) * sin(6 * second_Scale* CV_PI / 180);//刻度的終點y座標賦值
        line(clock_background, second_begin, second_end, Scalar(50, 205, 50), scale_width);//連接起點終點
    }
    imshow("clock", clock_background);
    waitKey(0);
    return 0;    
}

我畫時鐘第一步就是先把整體的輪廓畫出來。
步驟:

  • 第一步:畫一個外輪廓,這個很簡單,確定圓心,半徑,就可以畫出。
  • 第二步:把刻度給畫出來,這一步就相對有點思考,不過其實也很簡單。
    首先,明確OpenCV中的座標原點是在圖片的左上角,那麼,我們畫的圓的原點也就相當於(center.x,center.y)
    然後如果找圓上一點,怎麼找呢?是不是可以通過
    center.x + radius * cos(6 * second_Scale * CV__PI / 180)
    因爲每個刻度相隔6°,所以要找每隔6°的x座標,y座標同理。
    至此,總體畫出來了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章