首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python实战篇(四)---Python+OpenCV画动态时钟

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

作者头像
用户5410712
发布2022-06-01 15:56:18
发布2022-06-01 15:56:18
6880
举报
文章被收录于专栏:居士说AI居士说AI

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

一、效果展示

二、主要函数讲解

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

代码语言:javascript
复制

# 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条秒和分钟的刻线

代码语言:javascript
复制
# 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 主函数

代码语言:javascript
复制
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实现,比较费力的是各种角度和线条的换算和绘制,希望大家了解就好,另外代码还有很多可以改善的地方,期待大家去发现,我们下期再会。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档