python打开相机,用鼠标左键框选矩形区域,支持一次框选多个矩形区域,通过鼠标右标清除上一次画的矩形。
2023-12-15 16:41:50
    		方案一
import cv2
# Global variables
rectangles = []
current_rectangle = []
drawing = False
# Mouse callback function
def mouse_callback(event, x, y, flags, param):
    global rectangles, current_rectangle, drawing
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        current_rectangle = [(x, y)]
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        current_rectangle.append((x, y))
        rectangles.append(tuple(current_rectangle))
        current_rectangle = []
    elif event == cv2.EVENT_RBUTTONDOWN:
        rectangles.pop()
# Open camera
cap = cv2.VideoCapture(0)
# Create a window and set mouse callback
cv2.namedWindow('Camera')
cv2.setMouseCallback('Camera', mouse_callback)
while True:
    # Read frame from camera
    ret, frame = cap.read()
    # Draw rectangles on the frame
    for rect in rectangles:
        cv2.rectangle(frame, rect[0], rect[1], (0, 255, 0), 2)
    # Display the frame
    cv2.imshow('Camera', frame)
    # Check for key press
    key = cv2.waitKey(1)
    if key == 27:  # Press 'Esc' to exit
        break
# Release the camera and destroy all windows
cap.release()
cv2.destroyAllWindows()方案二
import cv2
# Global variables
rectangles = []
current_rectangle = []
drawing = False
rect_x = 0
rect_y = 0
# Mouse callback function
def mouse_callback(event, x, y, flags, param):
    global rectangles, current_rectangle, drawing
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        current_rectangle = [(x, y)]
        global rect_x, rect_y
        rect_x = x
        rect_y = y
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        current_rectangle.append((x, y))
        rectangles.append(tuple(current_rectangle))
        current_rectangle = []
    elif event == cv2.EVENT_RBUTTONDOWN:
        rectangles.pop()
# Open camera
cap = cv2.VideoCapture(0)
# Create a window and set mouse callback
cv2.namedWindow('Camera')
cv2.setMouseCallback('Camera', mouse_callback)
while True:
    # Read frame from camera
    ret, frame = cap.read()
    # Draw rectangles on the frame
    for rect in rectangles:
        cv2.rectangle(frame, rect[0], rect[1], (0, 255, 0), 2)
    # Draw current rectangle in real-time
    if drawing:
        cv2.rectangle(frame, current_rectangle[0], (rect_x, rect_y), (0, 255, 0), 2)
    # Display the frame
    cv2.imshow('Camera', frame)
    # Check for key press
    key = cv2.waitKey(1)
    if key == 27:  # Press 'Esc' to exit
        break
# Release the camera and destroy all windows
cap.release()
cv2.destroyAllWindows()下一步修改优化
a 在图像区域内实时显示鼠标所在位置的十字线
b 实时显示绘制框的过程
    			文章来源:https://blog.csdn.net/moonlightpeng/article/details/134868826
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!