基于鼠标事件与键盘控制的针对鼠标运动轨迹的图像ROI截取
1、前言
最近开发的项目需要的根据鼠标运动轨迹截取roi,在博客上找了找木有,其他的啥的截取roi倒都有可惜我用不到。
下面是我的实现代码
2、程序
import cv2 as cv
import numpy as np
global img
lsPointsChoose=[]
def on_mouse(event,x,y,flags,param):
global img,lsPointsChoose
img2=img.copy()
if event==cv.EVENT_LBUTTONDOWN:#左键按下
pass
elif event==cv.EVENT_MOUSEMOVE and (flags & cv.EVENT_FLAG_LBUTTON):#左键拖拽
lsPointsChoose.append([x,y])#用于提取多边形ROI
#print('the point :{0} {1}'.format(str(x),str(y)))
for i in range(len(lsPointsChoose)-1):
cv.line(img2,lsPointsChoose[i],lsPointsChoose[i+1],(0,0,255),5)
cv.imshow('src',img2)
elif event ==cv.EVENT_LBUTTONUP:
format('')
#print(len(lsPointsChoose))
if len(lsPointsChoose)>5:#点数太少的就不画了
ROI_byMouse()
lsPointsChoose=[]
def ROI_byMouse():
mask=np.zeros_like(img)
pts=np.array([lsPointsChoose],np.int32)
mask=cv.polylines(mask,[pts],True,(0,255,255))
mask2=cv.fillPoly(mask,[pts],(255,255,255))
cv.namedWindow('ROI',0)
ROI=cv.bitwise_and(mask2,img)
cv.imshow('ROI',ROI)
def main():
global img
img=cv.imread('D:\AI\\2D23D\pidinet-master\pidinet-master\outputimgs2\\frame229.jpg')
cv.namedWindow('src',0)
cv.setMouseCallback('src',on_mouse)#设置窗口的回调函数事件
cv.imshow('src',img)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__=="__main__":
main()
AI 代码解读
三、运行效果
在这里使用了蒙版,所以ROI区域与原图是一样大的。
不过,不影响,有兴趣的童鞋可以通过拟合矩形对ROI进一步截取。套娃?