基于鼠标事件与键盘控制的针对鼠标运动轨迹的

基于鼠标事件与键盘控制的针对鼠标运动轨迹的图像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()

三、运行效果

在这里插入图片描述
在这里使用了蒙版,所以ROI区域与原图是一样大的。
不过,不影响,有兴趣的童鞋可以通过拟合矩形对ROI进一步截取。套娃?

猜你喜欢

转载自blog.csdn.net/qq_51116518/article/details/126481504