OpenCV中鼠标交互-绘制矩形框

OpenCV中鼠标交互-绘制矩形框

·具体流程:
1、绑定回调函数
2、在回调函数中检测触发的事件
3、根据不同事件做出不同动作

一、绑定回调函数

cv2.setMouseCallback('origianl',click_event)

'origianl’为窗体的名字,client_event为回调函数的函数名

二、在回调函数中检测触发的事件

回调函数的的参数为固定格式:
第一个参数event:事件类型
x:为坐标x
y:为坐标y
flags:为鼠标滚轮的方向
param:为传入参数

def click_event(event,x,y,flags,param):
    global startP
    global endP
    global flag
    global currentP
    global stop
    global img
    img2 = img.copy()
    if event == cv2.EVENT_RBUTTONDOWN:
        flag = 1
        startP = (x,y)
        stop = 1

    if event == cv2.EVENT_LBUTTONDOWN:
        flag = 0
        endP = (x,y)
        cv2.rectangle(img,startP,endP,[0,0,255])
        stop = 0

    if event == cv2.EVENT_MOUSEMOVE:
        currentP = (x,y)
        if flag == 1:
            cv2.rectangle(img2,startP,currentP,[0,0,255])
            cv2.imshow('origianl',img2)
    if event == cv2.EVENT_MOUSEWHEEL:
        print(x,y)
        print(flags)
        print(param)

三、根据不同事件做出不同动作

常用的鼠标事件有以下几种:cv2.EVENT_RBUTTONDOWN、cv2.EVENT_RBUTTONUP、cv2.EVENT_MOUSEMOVE、cv2.MOUSEWHEEL.以上四种事件为,右键按下事件、右键松开事件、鼠标移动事件、鼠标滚轮事件
右键按下为矩形框开始点,左键按下为矩形框右下角结束点,将图像绘制在img图像中可以保存。按下右键然后移动鼠标会实时显示矩形框,此时将矩形框显示在img的copy版上并不保存。
具体的实现效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_25105061/article/details/108783665