📜  python opencv用鼠标绘制矩形 - Python(1)

📅  最后修改于: 2023-12-03 15:34:03.025000             🧑  作者: Mango

Python OpenCV用鼠标绘制矩形

在使用OpenCV进行图像处理时,经常需要手动选取图像的某个区域进行处理,本文将介绍如何使用鼠标在OpenCV中绘制矩形框选区域。

实现方法

使用OpenCV Python中的cv2.rectangle()函数可以绘制矩形,而使用鼠标的动作可以通过OpenCV中的setMouseCallback()函数来捕捉。最后结合这两个函数就可以实现用鼠标绘制矩形区域的功能。

  1. 导入必要的Python库和OpenCV库
import cv2
import numpy as np
  1. 设置鼠标的动作
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
  1. 打开摄像头或者读取图片
cap = cv2.VideoCapture(0)  # 打开摄像头
# img = cv2.imread('image.jpg')  # 读取图片
  1. 绘制矩形
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打开图像窗口观察。