美文网首页
“元宇宙时钟模拟” OpenCV中绘制模拟时钟显示当前时间

“元宇宙时钟模拟” OpenCV中绘制模拟时钟显示当前时间

作者: Python百事通 | 来源:发表于2021-12-12 15:34 被阅读0次

前言

在本篇中,将利用绘图函数,学习如何在实战项目中使用绘图,绘制模拟时钟显示当前时间。

模拟时钟外观

结合OpenCV中的绘图函数(例如,cv2.line()、cv2.circle()和cv2.putText()等),以渲染更高级的绘图,同时更好的理解和实际运用所了解的绘图函数。为了将所有绘图函数进行综合运用,构建一个模拟时钟来显示当前时间——包括时针、分针和秒针。

为了实现上述需求,编写clock_appearance.py脚本。clock_appearance.py脚本使用cv.line()、cv.circle()和cv2.putText()绘制模拟时钟,首先绘制静态时钟外观,我们需要两个包含固定坐标的数组(至于这些数组是如何计算得到的,将在下一小节中介绍):

hours_orig = np.array([(620,320), (580,470), (470,580), (320,620), (170,580), (60,470), (20,320), (60,170), (169,61), (319,20), (469,60), (579,169)])

hours_dest = np.array([(600,320), (563,460), (460,562), (320,600), (180,563), (78,460), (40,320), (77,180), (179,78), (319,40), (459,77), (562,179)])

这些数组是渲染小时刻度所必需的,因为它们定义了时钟每小时的刻度线条。数组定义完成后,将这些刻度进行绘制:

foriinrange(0,12):    cv2.line(image, array_to_tuple(hours_orig[i]), array_to_tuple(hours_dest[i]), colors['black'],3)

此外,还应该绘制了一个大圆圈,对应于模拟时钟表盘的形状:

cv2.circle(image, (320, 320), 310, colors['black'], 8)

最后,在时钟内绘制文本,进行个性化定制:

一旦在图像中绘制了这些静态信息,我们将其复制到 image_original 图像中:

image_original = image.copy()

在下图中,可以看到模拟时钟的外观:

计算时针刻度 hours_orig 和 hours_dest 数组

为了计算计算时针刻度hours_orig和hours_dest数组,我们编写clock_hours.py计算hours_orig和hours_dest数组的固定坐标。为了计算小时刻度的 (x, y) 坐标,我们使用圆的参数方程:

按照上述公式计算从 0 度开始每隔 30 度为一个时针刻度,共 12 个点P(x, y)的坐标(0、30、60、90、120、150、180、210、240、270、300和330),为了获取两个端点的坐标,我们具有两个不同的半径。这样,我们就可以得到时针刻度线的坐标:

使用模拟时钟显示当前时间

得到表盘外观后,接下来就要使用模拟时钟显示当前时间:

1.从当前时间获取小时、分钟和秒:

2.将时、分和秒都转换为角度,用于接下来指针线段的绘制:

3.绘制与时针、分针和秒针对应的线段:

4.最后绘制一个小圆圈作为三根指针的连接点:

cv2.circle(image, (320,320),10, colors['dark_gray'], -1)

运行代码可以看到绘制的模拟时钟可以正确显示当前时间:

相关文章

网友评论

      本文标题:“元宇宙时钟模拟” OpenCV中绘制模拟时钟显示当前时间

      本文链接:https://www.haomeiwen.com/subject/ayklfrtx.html