关于鼠标setMouseCallback()函数操作退出

本文介绍了在OpenCV项目中如何使用setMouseCallback函数实现鼠标选取ROI区域,并详细讲解了如何在用户完成选取后优雅地退出鼠标回调功能。通过设置setMouseCallback为NULL来解除鼠标事件绑定,或者使用waitKey结合循环结构控制程序流程,确保在不需要鼠标交互时退出响应。此方法提高了用户体验,适合需要自定义选取操作的场景。

关于鼠标setMouseCallback()函数操作退出

之前一段时间做过鼠标行为操作,当时项目的要求,需要选用鼠标自定义选取检测区域,可是不能每一次检测识别线段都需要选取点,不符合用户体验,因此要求只需要开头选取一次Roi区域。本人也只是初学者一个,在网上翻遍了很多资料,发现都很少描述到对于setMouseCallback()如何退出的问题,因此我选择在这里记录一下,方便自己以后查看;同时也希望能够帮助有同样需求的朋友。

代码如下:

int main()
{
   
   
	Mat img = imread("IMG_3593.jpg");
	Mat dst;
	vector<Vec4i>Points_vec;
	Vec4i outputPoints
### 使用 OpenCV-Python 实现鼠标绘制矩形框 为了实现在图像上通过鼠标交互来绘制矩形框,可以定义回调函数处理不同的事件如按钮按下、释放以及拖动。下面是一个具体的例子说明怎样设置这些功能。 #### 导入必要的库并初始化全局变量 ```python import cv2 import numpy as np drawing = False # 当鼠标按下时变为 True ix, iy = -1, -1 # 记录鼠标的初始位置 ``` #### 定义鼠标回调函数 此部分代码创建了一个名为 `draw_rectangle` 的函数用于监听鼠标动作,并依据当前状态更新绘图参数。 ```python def draw_rectangle(event, x, y, flags, param): global ix, iy, drawing if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix, iy = x, y elif event == cv2.EVENT_MOUSEMOVE: if drawing is True: img_copy = img.copy() cv2.rectangle(img_copy, (ix,iy), (x,y), (0,255,0), 2) cv2.imshow('image',img_copy) elif event == cv2.EVENT_LBUTTONUP: drawing = False cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),2) cv2.imshow('image',img) ``` #### 加载图片并显示窗口 加载一张图片作为背景,在其上面进行绘制操作;同时注册上述编写的回调方法给指定窗口。 ```python # 创建黑色背景的图像或读取已有图像 img = np.zeros((512, 720, 3), dtype=np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image', draw_rectangle) ``` #### 主循环等待按键退出程序 最后进入无限循环直到用户按任意键结束程序运行。 ```python while(1): cv2.imshow('image', img) k = cv2.waitKey(1) & 0xFF if k == ord('q'): break cv2.destroyAllWindows() ``` 以上就是完整的使用OpenCV-Python实现基于鼠标的矩形框绘制过程[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值