python实战篇(四)---Python+OpenCV画动态时钟

人生的旅途,前途很远,也很暗。

      然而不要怕,不怕的人面前才有路。                           

—— 鲁 迅

     虽寒冬已近,但,我们的心依旧温暖;python实战,我们一直在路上,请欣赏今天的实战内容,耐心点哦!

一、效果展示

二、主要函数讲解

2.1 新建一个画板并填充成白色,并画出原盘



# 1. 新建一个画板并填充成白色
img = np.zeros((450, 450, 3), np.uint8)
img[:] = (255, 255, 255)
# 2. 画出圆盘
cv2.circle(img, center, radius, (0, 0, 0), thickness=5)

分析:首先用numpy(np)生成了长宽高的全0数据,之后再用cv2.circle函数画圆。

2.2  画出60条秒和分钟的刻线

# 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)
    cv2.line(img, pt1[i], (int(x2), int(y2)), (255, 0, 0), thickness=2)

分析:循环绘制60次,重点函数在于cv2.line,它的功能是绘制线段,前面都是对线段的属性进行配置。

2.3  主函数

while (1):
    # 不断拷贝表盘图,才能更新绘制,不然会重叠在一起
    temp = np.copy(img)
    # 5. 获取系统时间,画出动态的时-分-秒三条刻线
    now_time = datetime.datetime.now()
    hour, minute, second = now_time.hour, now_time.minute, now_time.second
    # 画秒刻线
    # OpenCV中的角度是顺时针计算的,所以需要转换下
    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)), (203, 255, 166), 2)
    # 画分刻线
    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)), (186, 199, 255), 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, 198, 26), 15)

再次欣赏效果图:

     今天的实战分享结束了,我们学习了一个动态时钟的python实现,比较费力的是各种角度和线条的换算和绘制,希望大家了解就好,另外代码还有很多可以改善的地方,期待大家去发现,我们下期再会。

编辑:玥怡居士|审核:小圈圈居士


往期精彩回顾

python实战篇(三)---放慢视频VS图像添加文字

python实战篇(二)----图像视频读取

python实战篇(一)----人脸检测与识别

更多精彩推荐,请关注我们

居士之家

微信号 : IT进阶之旅

长按识别二维码关注

你点的每个赞,我都认真当成了喜欢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值