OpenCV Python ŌĆō 如何使用鼠标事件绘制曲线?
在数字图像处理中,曲线绘制是非常常见的操作。利用 Python 中的 OpenCV 库,我们可以方便地使用鼠标事件来绘制曲线。
本文将带领您了解如何使用 OpenCV Python ŌĆō 使用鼠标事件绘制曲线。在此之前,我们需要先安装好 OpenCV 库。
准备工作
我们需要使用 Python 的 OpenCV 库来实现鼠标事件绘制曲线。请在您的控制台中输入以下命令来安装 OpenCV 库:
pip install opencv-python
安装完成后,我们就可以开始实现了。
实现过程
- 导入必要的库
我们需要使用OpenCV库中的函数cv2.namedWindow()和cv2.setMouseCallback()来实现鼠标事件监听。为了使代码更简洁,我们还将调用sys库的exit()函数来终止程序。
import cv2
import numpy as np
import sys
# 定义一些全局变量
drawing = False # 是否绘制,初始值为False
color = (0, 0, 0) # 绘制颜色,初始值为黑色
thickness = 3 # 线条粗细,初始值为3
- 定义鼠标事件监听函数
def draw_line(event, x, y, flags, param):
global drawing
if event == cv2.EVENT_LBUTTONDOWN:
# 鼠标左键按下,开始绘制
drawing = True
elif event == cv2.EVENT_MOUSEMOVE:
# 鼠标移动,继续绘制
if drawing:
cv2.line(img, (x, y), (x, y), color, thickness)
elif event == cv2.EVENT_LBUTTONUP:
# 鼠标左键松开,结束绘制
drawing = False
- 加载图片并设置鼠标回调
img = np.full((512, 512, 3), 255, np.uint8) # 创建一张白色的图片
cv2.namedWindow("image")
cv2.setMouseCallback("image", draw_line) # 设置鼠标回调
- 实现绘制功能并展示结果
while True:
cv2.imshow("image", img)
key = cv2.waitKey(1) & 0xFF
# 按ESC键退出程序
if key == 27:
break
# 按C键清空已绘制的内容
elif key == ord("c"):
img = np.full((512, 512, 3), 255, np.uint8)
# 按B键更改画笔颜色(黑色、白色、红色、蓝色随机切换)
elif key == ord("b"):
color = tuple(np.random.randint(0, 256, size=3).tolist())
# 按T键设置画笔粗细(1~10随机)
elif key == ord("t"):
thickness = np.random.randint(1, 11)
cv2.destroyAllWindows() # 关闭窗口
完整代码
import cv2
import numpy as np
import sys
# 定义一些全局变量
drawing = False # 是否绘制,初始值为False
color = (0, 0, 0) # 绘制颜色,初始值为黑色
thickness = 3 # 线条粗细,初始值为3
def draw_line(event, x, y, flags, param):
global drawing
if event == cv2.EVENT_LBUTTONDOWN:
# 鼠标左键按下,开始绘制
drawing = True
elif event == cv2.EVENT_MOUSEMOVE:
# 鼠标移动,继续绘制
if drawing:
cv2.line(img, (x, y), (x, y), color, thickness)
elif event == cv2.EVENT_LBUTTONUP:
# 鼠标左键松开,结束绘制
drawing = False
img = np.full((512, 512, 3), 255, np.uint8)
cv2.namedWindow("image")
cv2.setMouseCallback("image", draw_line)
while True:
cv2.imshow("image", img)
key = cv2.waitKey(1) & 0xFF
# 按ESC键退出程序
if key == 27:
break
# 按C键清空已绘制的内容
elif key == ord("c"):
img = np.full((512, 512, 3), 255, np.uint8)
# 按B键更改画笔颜色(黑色、白色、红色、蓝色随机切换)
elif key == ord("b"):
color = tuple(np.random.randint(0, 256, size=3).tolist())
# 按T键设置画笔粗细(1~10随机)
elif key == ord("t"):
thickness = np.random.randint(1, 11)
cv2.destroyAllWindows()
结论
在本文中,我们介绍了如何使用Python OpenCV来实现鼠标事件绘制曲线。首先,我们导入必要的库和定义一些全局变量。然后,我们定义了一个鼠标事件监听函数,它可以通过事件类型来响应鼠标操作并绘制曲线。接着,我们加在了一张白色的图片并设置了鼠标回调函数。最后,我们使用一个while循环来实现绘制功能,并对程序进行了一些控制,如清空已绘制的内容、更改画笔颜色和线条粗细等。
通过本文的讲解,您已经掌握了如何使用 OpenCV Python ŌĆō 使用鼠标事件绘制曲线。如果您想要进一步学习OpenCV其他功能,可以查阅OpenCV官方文档。