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

简介: 该文章介绍了一个基于鼠标事件和键盘控制的图像ROI截取工具的实现,包括使用OpenCV库监听鼠标事件、记录鼠标拖拽轨迹、绘制多边形ROI以及应用掩模提取感兴趣区域的代码示例和运行效果展示。

基于鼠标事件与键盘控制的针对鼠标运动轨迹的图像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进一步截取。套娃?

相关文章
|
5月前
ThreeJs的场景实现鼠标拖动旋转控制
这篇文章介绍了如何在Three.js中实现通过鼠标拖动来旋转场景中的模型,并提供了实现这一功能的代码示例。
203 0
|
10月前
鼠标不同方位移入特效
鼠标不同方位移入特效
HMI-43-【节能模式】顶部标题栏和底部信息栏及灯光及启动动画
今天来实现以下节能模式的Title底部信息栏,灯光系统,以及启动动画。
HMI-43-【节能模式】顶部标题栏和底部信息栏及灯光及启动动画
|
10月前
【sgOvalMenu】自定义组件:椭圆形菜单,菜单按钮可以随着椭圆轨迹进行循环运动
【sgOvalMenu】自定义组件:椭圆形菜单,菜单按钮可以随着椭圆轨迹进行循环运动
LabVIEW鼠标滚轮实现波形放大缩小(zoom)功能
实现功能:将鼠标放在波形图曲线上,滚轮可以实现波形放大缩小功能。 代码思想:注册鼠标滚轮事件,滚轮时改变波形图横纵坐标最大值和最小值。
188 0
【PyAutoGUI操作指南】02 鼠标控制功能+获取当前坐标+鼠标事件+鼠标滚动查询
左上角的像素位于坐标0,0。如果屏幕分辨率为1920 x 1080,则右下角的像素将为1919,1079(因为坐标从0开始,而不是1)。
612 0
4.2 锁屏小部件亮屏时不显示边框
4.2 锁屏小部件亮屏时不显示边框
128 0
4.2 锁屏小部件亮屏时不显示边框
CV4 基于鼠标回调函数及轨迹调色的简单人机交互应用
创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。
144 0
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
510 0
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等