📅  最后修改于: 2023-12-03 15:34:03.025000             🧑  作者: Mango
在使用OpenCV进行图像处理时,经常需要手动选取图像的某个区域进行处理,本文将介绍如何使用鼠标在OpenCV中绘制矩形框选区域。
使用OpenCV Python中的cv2.rectangle()
函数可以绘制矩形,而使用鼠标的动作可以通过OpenCV中的setMouseCallback()
函数来捕捉。最后结合这两个函数就可以实现用鼠标绘制矩形区域的功能。
import cv2
import numpy as np
x_start, y_start, x_end, y_end = 0, 0, 0, 0
drawing = False
def draw_rect(event, x, y, flags, params):
global x_start, y_start, x_end, y_end, drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
x_start, y_start = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing:
x_end, y_end = x, y
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cap = cv2.VideoCapture(0) # 打开摄像头
# img = cv2.imread('image.jpg') # 读取图片
while True:
ret, frame = cap.read() # 读取一帧图像
# frame = img.copy() # 使用读取的图片
cv2.namedWindow('frame')
cv2.setMouseCallback('frame', draw_rect)
if not drawing:
cv2.imshow('frame', frame)
else:
cv2.rectangle(frame, (x_start, y_start), (x_end, y_end), (0, 255, 0), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
在这个程序中,我们首先定义了draw_rect()
函数,用于捕捉鼠标动作,其中:
cv2.EVENT_LBUTTONDOWN
表示鼠标左键按下;cv2.EVENT_MOUSEMOVE
表示鼠标移动;cv2.EVENT_LBUTTONUP
表示鼠标左键松开。在捕捉到鼠标左键按下时,我们记录了当前鼠标的位置,然后在EVENT_MOUSEMOVE
时记录鼠标的移动位置,最后在EVENT_LBUTTONUP
时绘制矩形框选区域。
使用cv2.bridge()
函数可以发送消息给ROS,并在功能包中使用rqt_image_view打开图像窗口观察。