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

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

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

为了在事件发生时执行操作,我们定义一个鼠标回调函数。我们使用cv2.EVENT_LBUTTONDOWN、cv2.EVENT_MOUSEMOVE和cv2.EVENT_LBUTTONUP鼠标事件来在图像上绘制矩形。

步骤

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

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

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

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

  • 创建一个名为’Rectangle Window’的窗口,并将鼠标回调函数’draw_rectangle’绑定到该窗口。

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

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

示例

在这个示例中,我们使用鼠标事件cv2.EVENT_LBUTTONDOWN和cv2.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 ) 才会被绘制出来。我们使用鼠标事件绘制了两个矩形。请参考以下截图。

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

示例

在这个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 )。

我们使用鼠标事件来绘制一个矩形。请看下面的截图。

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程