利用Python+Opencv绘制时钟

所需知识

  • 圆的知识
  • opencv中绘制圆、直线、文字的函数circle()、line()、putText()

程序代码:

import cv2
import math
import datetime
import numpy as np
#*********绘制钟盘***********#
margin=5
radius=220
center=(center_x,center_y)=(225,225)
img=np.zeros((450,450,3),np.uint8)
img[:]=(255,255,255)
cv2.circle(img,center,radius,(0,0,0),thickness=5)
#********绘制刻度********#
pt1=[]
for i in range(60):
    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)))

    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)

    cv2.line(img,pt1[i],(int(x2),int(y2)),(0,0,0),thickness=2)
for i in range(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)
    cv2.line(img,pt1[i*5],(int(x),int(y)),(0,0,0),thickness=5)
    num=str(i+3) if i<=9 else str(i-9)
    font = cv2.FONT_HERSHEY_SIMPLEX
    text_x=center_x+(radius-40)*math.cos(i*30*np.pi/180.0)
    text_y=center_y+(radius-40)*math.sin(i*30*np.pi/180.0)
    cv2.putText(img, num, (int(text_x)-10, int(text_y)+10), font, 1, (0, 0, 0), 2)#偏移量为10
while(1):
    #不断拷贝表盘图,才能更新绘制,否则会重叠在一起

    temp=np.copy(img)
    now_time=datetime.datetime.now()
    hour,minute,second=now_time.hour,now_time.minute,now_time.second

    #画秒线,从水平位置0°顺时针旋转
    sec_angle=second*6+270 if second<=15 else (second-15)*6
    sec_x=center_x+(radius-margin)*math.cos(sec_angle*np.pi/180.0)
    sec_y=center_y+(radius-margin)*math.sin(sec_angle*np.pi/180.0)
    cv2.line(temp,center,(int(sec_x),int(sec_y)),(0,0,255),2)
    #print('sec_angle',sec_angle)
    #画分线
    min_angle=minute*6+270 if minute<=15 else (minute-15)*6
    min_x=center_x+(radius-35)*math.cos(min_angle*np.pi/180.0)
    min_y=center_y+(radius-35)*math.sin(min_angle*np.pi/180.0)
    cv2.line(temp,center,(int(min_x),int(min_y)),(0,255,0),8)

    #画时线
    hour_angle=hour*30+270 if hour<=3 else (hour-3)*30
    hour_x=center_x+(radius-65)*math.cos(hour_angle*np.pi/180.0)
    hour_y=center_y+(radius-65)*math.sin(hour_angle*np.pi/180.0)
    cv2.line(temp,center,(int(hour_x),int(hour_y)),(255,0,0),15)

    font=cv2.FONT_HERSHEY_SIMPLEX
    time_str=now_time.strftime('%d/%m/%Y')
    name_str='MADE BY ZZT'
    cv2.putText(img,time_str,(135,275),font,1,(0,0,0),2)
    cv2.putText(img, name_str, (135, 220), font, 1, (0, 0, 0), 2)
    cv2.imshow('clock',temp)
    if cv2.waitKey(1)==27:
        break






程序运行结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值