OpenCV Python – 如何使用鼠标事件绘制矩形?


鼠标事件有多种类型,例如左键或右键单击、鼠标移动、左键双击等。鼠标事件返回鼠标事件的坐标(x,y)

当事件发生时执行操作,我们需要定义一个鼠标回调函数。我们使用cv2.EVENT_LBUTTONDOWNcv2.EVENT_MOUSEMOVEcv2.EVENT_LBUTTONUP鼠标事件在图像上绘制矩形。

步骤

要使用鼠标事件绘制矩形,请按照以下步骤操作:

  • 导入所需的库OpenCV。确保您已安装它。

  • 创建一个黑色图像。我们在这个黑色图像上绘制矩形。我们还可以使用cv2.imread()方法读取图像并在其上绘制矩形。

  • 定义一个鼠标回调函数'draw_rectangle'来在图像上绘制矩形。当鼠标事件发生时,会执行鼠标回调函数。鼠标事件会给出鼠标事件的坐标。要绘制矩形,我们需要图像上的至少两个点。

  • 创建一个窗口'Rectangle Window'并将鼠标回调函数'draw_rectangle'绑定到此窗口。

  • 显示图像窗口“Rectangle Window”。此窗口打开我们在其上绘制圆形的图像。要关闭窗口,请按esc键。

让我们看一些程序示例来清楚地理解它。

示例

在此示例中,我们使用鼠标事件cv2.EVENT_LBUTTONDOWNcv2.EVENT_LBUTTONUP绘制矩形。

# import required libraries import cv2 import numpy as np drawing = False ix,iy = -1,-1 # define mouse callback function to draw circle def draw_rectangle(event, x, y, flags, param): global ix, iy, drawing, img if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix = x iy = y elif event == cv2.EVENT_LBUTTONUP: drawing = False cv2.rectangle(img, (ix, iy),(x, y),(0, 255, 255),-1) # Create a black image img = np.zeros((512,700,3), np.uint8) # Create a window and bind the function to window cv2.namedWindow("Rectangle Window") # Connect the mouse button to our callback function cv2.setMouseCallback("Rectangle Window", draw_rectangle) # display the window while True: cv2.imshow("Rectangle Window", img) if cv2.waitKey(10) == 27: break cv2.destroyAllWindows()

当您执行上述 Python 代码时,它将打开一个窗口,显示一个黑色图像。我们可以通过拖动鼠标在上面绘制矩形。绘制矩形的过程是首先按下鼠标左键 (EVENT_LBUTTONDOWN) 并移动鼠标 (EVENT_MOUSEMOVE),然后释放按钮 (EVENT_LBUTTONUP)。

在此示例中,直到释放按钮 (EVENT_LBUTTONUP) 才会绘制矩形。我们使用鼠标事件绘制两个矩形。请参阅以下屏幕截图。


示例

在此 Python 示例中,我们使用三个鼠标事件cv2.EVENT_LBUTTONDOWN、cv2.EVENT_MOUSEMOVEcv2.EVENT_LBUTTONUP绘制矩形。

# import required libraries import cv2 import numpy as np drawing = False ix,iy = -1,-1 # define mouse callback function to draw circle def draw_rectangle(event, x, y, flags, param): global ix, iy, drawing, img if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix = x iy = y elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: cv2.rectangle(img, (ix, iy), (x, y),(0, 0, 255),-1) elif event == cv2.EVENT_LBUTTONUP: drawing = False cv2.rectangle(img, (ix, iy), (x, y), (0, 0, 255), 2) # Create a black image img = np.zeros((512,700,3), np.uint8) # Create a window and bind the function to window cv2.namedWindow("Rectangle Window") # Connect the mouse button to our callback function cv2.setMouseCallback("Rectangle Window", draw_rectangle) # display the window while True: cv2.imshow("Rectangle Window", img) if cv2.waitKey(10) == 27: break cv2.destroyAllWindows()

当您执行上述 Python 代码时,它将打开一个窗口,显示一个黑色图像。绘制矩形的过程与示例 1 中讨论的相同。在此示例中,在移动鼠标 (EVENT_MOUSEMOVE) 时绘制矩形。当鼠标左键释放 (EVENT_LBUTTONUP) 时,绘制最终矩形。

我们使用鼠标事件绘制矩形。请参阅以下屏幕截图。


更新于: 2022年12月2日

6K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告