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