前言
随机数在图像处理和计算机视觉中有着广泛应用,例如生成随机颜色、随机坐标等。在这篇文章中,我们使用 OpenCV 和 NumPy 来实现一个动态绘制随机颜色线条的小程序,并详细讲解核心实现。
完整代码
import cv2 as cv
import numpy as np
def random_color_demo():
# 创建一个黑色画布
image = np.zeros((512, 512, 3), dtype=np.uint8)
while True:
# 生成随机坐标 (x1, y1) 和 (x2, y2)
pt1 = tuple(np.random.randint(0, 512, size=2))
pt2 = tuple(np.random.randint(0, 512, size=2))
# 生成随机颜色 (B, G, R)
color = tuple(np.random.randint(0, 256, size=3))
# 绘制随机线条
cv.line(image, pt1, pt2, color, thickness=1, lineType=cv.LINE_8)
# 显示结果
cv.imshow("Random Color Lines", image)
# 等待按键,按下 ESC 键退出
if cv.waitKey(1) == 27:
break
# 关闭所有窗口
cv.destroyAllWindows()
# 调用函数
random_color_demo()
代码详解
1. 创建画布
image = np.zeros((512, 512, 3), dtype=np.uint8)
- 使用
np.zeros()
创建一个大小为 512×512 的黑色图像。 - 数据类型设置为
uint8
,表示每个像素的取值范围是 0~255。 3
表示图像有三个通道(BGR)。
2. 生成随机坐标
pt1 = tuple(np.random.randint(0, 512, size=2))
pt2 = tuple(np.random.randint(0, 512, size=2))
np.random.randint(0, 512, size=2)
生成两个随机整数,范围是[0, 512)
,分别代表 x 和 y 坐标。- 使用
tuple()
将生成的数组转换为坐标点格式(x, y)
。
3. 生成随机颜色
color = tuple(np.random.randint(0, 256, size=3))
np.random.randint(0, 256, size=3)
生成三个随机整数,范围是[0, 256)
,分别代表 B(蓝)、G(绿)、R(红)三通道颜色值。- 通过
tuple()
转换为颜色格式(B, G, R)
。
4. 绘制随机线条
cv.line(image, pt1, pt2, color, thickness=1, lineType=cv.LINE_8)
image
: 待绘制图像。pt1, pt2
: 直线的起点和终点坐标(x1, y1)
和(x2, y2)
。color
: 直线颜色(B, G, R)
。thickness
: 线条宽度,这里设置为1
。lineType
: 线条类型,cv.LINE_8
表示 8 像素连接线条,是默认值。
5. 显示图像与退出检测
cv.imshow("Random Color Lines", image)
if cv.waitKey(1) == 27:
break
cv.imshow()
: 显示图像窗口,窗口标题为"Random Color Lines"
。cv.waitKey(1)
: 等待 1 毫秒检测按键。如果按下ESC
(ASCII 码为 27),退出循环。
6. 关闭窗口
cv.destroyAllWindows()
- 关闭所有由 OpenCV 创建的窗口,释放资源。
优化思路
- 简化坐标和颜色生成:
- 使用 NumPy 的
size=2
和size=3
配合tuple()
,减少手动拆分数组和显式转换的代码。
- 使用 NumPy 的
- 参数调整灵活性:
- 可以将画布大小、线条宽度、颜色范围等设置为函数参数,便于复用。
运行效果
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容