📜  从图像python中的2个鼠标事件画线(1)

📅  最后修改于: 2023-12-03 14:49:22.907000             🧑  作者: Mango

从图像 Python 中的2个鼠标事件画线

如果你需要在 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个鼠标事件画线的功能。