📅  最后修改于: 2023-12-03 14:49:22.907000             🧑  作者: Mango
如果你需要在 Python 中绘制图像,并使用鼠标事件来画线,那么这篇文章就是为你准备的。我们将介绍如何使用 Python 中的 OpenCV 库和两个鼠标事件来实现画线功能。
首先,我们需要导入 OpenCV 库:
import cv2
接下来,我们需要定义一个变量,用于存储图像:
img = cv2.imread('image.jpg')
其中,'image.jpg' 是你需要操作的图像文件名。
然后,我们定义两个鼠标事件,一个用于画起点,一个用于画终点:
def draw_line(event, x, y, flags, param):
global ix,iy,drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.line(img,(ix,iy),(x,y),(0,0,255),2)
其中,cv2.EVENT_LBUTTONDOWN
用于监听鼠标左键按下事件,cv2.EVENT_LBUTTONUP
用于监听鼠标左键抬起事件。
接下来,我们将这两个事件绑定到图像上,然后运行程序:
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_line)
while True:
cv2.imshow('image', img)
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
我们使用 cv2.namedWindow()
函数创建一个名为 'image' 的窗口,并使用 cv2.setMouseCallback()
函数将鼠标事件绑定到该窗口上。
然后,我们使用 cv2.imshow()
函数在窗口中显示图像,并使用 cv2.waitKey()
函数等待用户按下ESC键退出程序。
最后,我们使用 cv2.destroyAllWindows()
函数关闭所有窗口。
完整代码如下:
import cv2
img = cv2.imread('image.jpg')
drawing = False
def draw_line(event, x, y, flags, param):
global ix,iy,drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.line(img,(ix,iy),(x,y),(0,0,255),2)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_line)
while True:
cv2.imshow('image', img)
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
现在,我们已经成功实现了从图像 Python 中的2个鼠标事件画线的功能。