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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

代码如下:

int main()
{
	Mat img = imread("IMG_3593.jpg");
	Mat dst;
	vector<Vec4i>Points_vec;
	Vec4i outputPoints;
	if (img.empty())
	{
		cout << "Please input the right image" << endl;
		return -1;
	}
	resize(img, dst, Size(img.cols * 0.2, img.rows * 0.2));

	imshow("Source image", dst);
	setMouseCallback("Source image", onMouse);
	for (;;)
	{
		if (waitKey(50) == 'q')//非常重要
		{
			break;
		}
	}
	setMouseCallback("Source image", NULL, NULL);

	getPoints_vec(dst, Points_vec);
	getPoints(Points_vec, outputPoints);

	waitKey(0);
	return 0;
}

其中非常关键的代码为:
setMouseCallback(“Source image”, NULL, NULL);此可以将鼠标响应事件与窗口解除绑定;除此之外还有第二种方法解除鼠标事件和窗口的绑定,如destroyWindow(“窗口名称”);
注意,注意,注意如下代码:

for (;;)
	{
		if (waitKey(50) == 'q')//非常重要
		{
			break;
		}
	}

该代码需要放在setMouseCallback(“Source image”, onMouse)和setMouseCallback(“Source image”, NULL, NULL)之间;循环格式怎么都无所谓,只要是死循环,中间放入一个退出循环的条件即可;个人理解该循环是我们操作鼠标参与的鼠标相应事件,事件结束后若不想继续鼠标响应,可以退出该循环执行后续语句块。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值