OpenCV_最简单的鼠标截取ROI区域

news2024/12/24 9:06:14

在OpenCV中也存在鼠标的操作,今天我们先介绍一下鼠标中的操作事件

void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)

setMousecallback参数说明:

winname:窗口的名字

onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。

这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);

userdate:传给回调函数的参数

MouseCallback函数定义为:

typedef void(* cv::MouseCallback)(int event,int x,int y,int flags,void *useradata);

参数说明:

event: 鼠标事件

x : 鼠标事件的x坐标

y : 鼠标事件的y坐标

flags: 鼠标事件的标志

userdata : 可选的参数

鼠标事件主要有下面几种:

CV_EVENT_MOUSEMOVE :鼠标移动

CV_EVENT_LBUTTONDOWN : 鼠标左键按下

CV_EVENT_RBUTTONDOWN : 鼠标右键按下

CV_EVENT_MBUTTONDOWN : 鼠标中键按下

CV_EVENT_LBUTTONUP : 鼠标左键放开

CV_EVENT_RBUTTONUP : 右键放开

CV_EVENT_MBUTTONUP : 中键放开

CV_EVENT_LBUTTONDBLCLK : 左键双击

CV_EVENT_RBUTTONDBLCLK : 右键双击

CV_EVENT_MBUTTONDBLCLK : 中键双击

CV_EVENT_MOUSEWHEEL : 鼠标向前(+)或向后(-)滑动

CV_EVENT_MOUSEHWHEEL : 鼠标向右(+)或向左(-)滑动

Flags主要有一下几种:

CV_EVENT_FLAG_LBUTTON :左键拖拽

CV_EVENT_FLAG_RBUTTON : 右键拖拽

CV_EVENT_FLAG_MBUTTON : 中键拖拽

CV_EVENT_FLAG_CTRLKEY : Ctrl按下不放

CV_EVENT_FLAG_SHIFTKEY : shift按下不放

CV_EVENT_FLAG_ALTKEY : alt按下不放

代码如下:

void QuickDemo::mouseDrawing_Demo(Mat& image) {
	namedWindow("鼠标绘制", WINDOW_AUTOSIZE);
	setMouseCallback("鼠标绘制", onDraw, (void*)&image);
	imshow("鼠标绘制", image);
	temp = image.clone();
}
Point sp(-1, -1);
Point ep(-1, -1);
Mat temp;
static void onDraw(int event, int x, int y, int flags, void* userdata) {
	
	Mat image = *((Mat*)userdata);
	if (event == EVENT_LBUTTONDOWN) {
		sp.x = x;
		sp.y = y;
		cout << "start point : " << sp << endl;
	}
	else if (event == EVENT_LBUTTONUP) {
		ep.x = x;
		ep.y = y;
		int dx = ep.x - sp.x;
		int dy = ep.y - sp.y;
		if (dx > 0 && dy > 0) {
			Rect box(sp.x, sp.y, dx, dy);
			rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);
			temp.copyTo(image);
			imshow("鼠标绘制", image);
			imshow("ROI区域绘制", image(box));
			sp.x = -1;
			sp.y = -1;
		}
	}
	else if (event == EVENT_MOUSEMOVE) {
		if (sp.x > 0 && sp.y > 0) {
			ep.x = x;
			ep.y = y;
			int dx = ep.x - sp.x;
			int dy = ep.y - sp.y;
			if (dx > 0 && dy > 0) {
				Rect box(sp.x, sp.y, dx, dy);
				temp.copyTo(image);
				rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);
				imshow("鼠标绘制", image);
			}
		}
	}
}

1.鼠标按下,记录起始位置。

2.鼠标移动,起始位置固定,实时绘制四边形并显示。

3.鼠标松开,记录终点位置,并根据四边形来绘制ROI区域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot+vue的音乐网站

随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分&#xff0c;包括可行性分析…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学&#xff0c;这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了&#xff0c;大力赞叹华为云的 同时感谢华为云提供优惠卷&#xff0c;只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动&#xff0c;90款免…

人类行为识别系统源码分享

人类行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【资料分析】刷题日记1

第一套 第二个是相比2019年的增长率&#xff0c;错找为同比增长率 延申&#xff1a; 当出口和进口相比2019年的增长率相同时&#xff0c;可以用盐水解决 √ 一个假设分配&#xff08;第二次是1.4取1&#xff09;加法对比选项 基期倍数&#xff1a; 求A是B的多少倍&#x…

DBeaver纵向展示一行数据

DBeaver查询结果如果列数太多&#xff0c;横着看并不方便&#xff0c;这时可以点击左下角的【记录】按钮&#xff0c;然后可看到纵向的展示结果。如图 就这么一个小功能&#xff0c;没细看的话直接上网搜&#xff0c;不知为啥出来的都是一堆错误方法。所以这里记一下。

2、HDFS编程实践

目录 1、Hadoop三种Shell方式(1)目录操作1、查看目录2、创建目录3、删除目录 &#xff08;2&#xff09;文件操作1、创建文件2、上传文件3、下载文件4、拷贝文件 2、利用Web界面管理HDFS3、利用Java API 与 HDFS 进行交互&#xff08;1&#xff09;安装eclipse包&#xff08;2&…

【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

千益畅行:旅游卡免费服务,包含哪些内容?

​凭此卡可免费旅游&#xff0c;单卡支持2-6人同行&#xff0c;免费服务内容包含&#xff1a;酒店住宿、团餐、景区首道大门票、导游、大巴、旅游责任险、接送机等&#xff0c;目前支持全国40多条旅游线路&#xff0c;爱旅游的朋友们可以约起来&#xff01; #旅游卡服务#

Facebook直播限流是什么原因?是ip地址导致的吗

随着社交媒体和直播行业的蓬勃发展&#xff0c;Facebook直播已成为众多企业和个人进行品牌推广、产品展示和互动交流的重要平台。然而&#xff0c;在享受直播带来的便利与效益的同时&#xff0c;不少用户也面临着直播限流的困扰。本文将探讨Facebook直播限流的原因&#xff0c;…

戴尔科技VS惠与科技:谁是美股AI服务器领域更好的投资选择?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;戴尔科技(DELL)和惠与科技(HPE)都是AI服务器领域的优质公司。 &#xff08;2&#xff09;惠与科技主导着以软件为中心的服务器市场&#xff0c;而戴尔科技则迎合着以硬件为中心的客户。 &#xff08;3&#xff09;两家公…

【C语言】带你手把手拿捏指针(3)(含转移表)

文章目录 一、字符指针变量二、数组指针变量1.数组指针变量是什么2.数组指针变量的初始化 三、二维数组传参的本质四、函数指针变量1. 函数指针变量的创建2.函数指针的使用3.案例解析&#xff1a; 五、typedof关键字六、函数指针数组和转移表1.函数指针数组2.转移表 一、字符指…

Linux基础---11优化系统

一.优化SSH连接速度 1&#xff09;修改配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak#备份vi /etc/ssh/sshd_config将79行和115行的yes修改为no,最后:wq保存退出&#xff08;79gg和115gg可直接跳至本行&#xff09; 79 行&#xff1a;GSSAPIAuthentication no…

二叉树OJ题——对称二叉树

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 对称二叉树 二、解题思路 三、解题代码

基础算法(3)——二分

1. 二分查找 题目描述&#xff1a; 解法一&#xff1a;暴力解法&#xff08;时间复杂度) 循环遍历数组&#xff0c;找到相等的值返回下标即可 解法二&#xff1a;二分查找 “有序数组可使用二分查找”&#xff0c;这句话是不严谨的&#xff0c;应该是具有 “二段性” 的数组…

nodejs+express+vue教辅课程辅助教学系统 43x2u前后端分离项目

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

蚂蚁在 RAG 与向量检索上的实践:技术应用与创新分析

引言 在AI技术迅猛发展的背景下&#xff0c;如何有效地处理海量数据成为了技术创新的关键问题。向量数据库和RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术结合&#xff0c;为提升生成式AI应用的准确性和实时性提供了有效的解决方案。本文结合蚂蚁集团在向量…

宠物空气净化器该怎么选?希喂、352、霍尼韦尔哪款对吸附浮毛有效

明明我都成年很久了&#xff0c;我爸妈还把我当小孩一样&#xff0c;我干什么前都要和他们说一声。前段时间去朋友家玩&#xff0c;本来对宠物无感的我一下子就被她家可爱的猫咪萌化了。猫咪好可爱呀&#xff0c;毛茸茸的摸起来很舒服&#xff0c;眨巴的大眼睛看着你真的心软软…

荣誉 | 分贝通入选2024「Cloud 100 China」

近日,2024 Cloud 100 China 榜单于美高梅酒店正式发布,这是靖亚资本和崔牛会联合推出的第三届榜单。 全球商旅管理、企业支出全流程管控、数据BI全方位降本、AI赋能高效出行体验.......近年来,分贝通不断精进产品能力及BI&AI能力,再次上榜。 本届评选,组委会基于过去一年融…

【MRI数据】LEMON MRI 数据集下载

本文介绍使用cyberduck软件下载 LEMON MRI 数据。 数据简介 LEMON MRI 数据官网&#xff1a;https://fcon_1000.projects.nitrc.org/indi/retro/MPI_LEMON.html 提供了 228 名健康参与者的公开数据集&#xff0c;包括年轻人&#xff08;N154&#xff0c;25.13.1 岁&#xff0…

ModbusTCP报文详解

Modbus TCP与Modbus Rtu(ASCI)数据帧的区别 总结&#xff1a;Modbus TCP就是在Modbus Rtu(ASCI)基础上去掉CRC&#xff0c;再加上六个0一个6 Modbus TCP MBAP报文头 域长度描述客户机服务器事务处理标识符2字节Modbus请求/响应事务处理的识别客户机启动服务器从接收的请求中重…