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版上并不保存。
具体的实现效果如下: