OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

允许用户在给定的图像上选择多个 ROI。

该函数创建一个窗口,并允许用户使用鼠标来选择多个 ROI。控制方式:使用空格键或回车键完成当前的选择并开始一个新的选择,使用 ESC 键终止多个 ROI 的选择过程。

注意
该函数使用 cv::setMouseCallback(windowName, …) 为指定的窗口设置自己的鼠标回调。工作完成后,将为使用的窗口设置一个空的回调。

函数原型

void cv::selectROIs	
(const String & 	windowName,InputArray 	img,std::vector< Rect > & 	boundingBoxes,bool 	showCrosshair = true,bool 	fromCenter = false,bool 	printNotice = true 
)		

参数

  • 参数windowName 显示选择过程的窗口的名称。
  • 参数wimg 用于选择 ROI 的图像。
  • 参数wboundingBoxes 选定的 ROIs。
  • 参数wshowCrosshair 如果为真,则将显示选择矩形的十字光标。
  • 参数wfromCenter 如果为真,则选择的中心将匹配初始鼠标位置。相反的情况下,选择矩形的一个角将对应于初始鼠标位置。
  • 参数wprintNotice 如果为真,则将在控制台中打印选择 ROI 或取消选择的通知。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_COLOR );if ( img.empty() ){std::cerr << "Error: Image not found!" << std::endl;return -1;}// 创建窗口std::string windowName = "Select ROIs";cv::namedWindow( windowName, cv::WINDOW_NORMAL );// 显示图像cv::imshow( windowName, img );// 准备存储 ROI 的向量std::vector< cv::Rect > boundingBoxes;// 提示用户如何进行选择std::cout << "Use the mouse to draw rectangles around the regions you want to select."<< " Press space or enter to confirm a selection and start a new one."<< " Press ESC to finish the selection process." << std::endl;// 选择 ROIscv::selectROIs( windowName, img, boundingBoxes, false, false, true );// 检查是否有 ROI 被选中if ( !boundingBoxes.empty() ){// 打印所选区域的信息std::cout << "Selected ROIs:" << std::endl;for ( const auto& roi : boundingBoxes ){std::cout << "ROI at (" << roi.x << ", " << roi.y << ") with size (" << roi.width << ", " << roi.height << ")" << std::endl;}// 在原图上画出所选区域的边界框for ( const auto& roi : boundingBoxes ){cv::rectangle( img, roi, cv::Scalar( 0, 255, 0 ), 2 );}// 显示带有边界框的图像cv::imshow( windowName, img );cv::waitKey( 0 );  // 等待用户按键}else{std::cout << "No ROIs were selected." << std::endl;}// 关闭所有窗口cv::destroyAllWindows();return 0;
}

运行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity新闻】Unity 6 正式版发布

Unity CEO Matt Bromberg 在今天自豪地宣布&#xff0c;Unity 6 正式发布&#xff01;作为迄今为止最强大和稳定的版本&#xff0c;Unity 6 为游戏和应用开发者提供了大量的新功能和工具&#xff0c;帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1&#xff08;LTS&a…

Django学习(三)

Django的设计模式及模板层 传统的MVC&#xff08;例如java&#xff09; Django的MTV 模板层&#xff1a; 模板加载&#xff1a; 代码&#xff1a; views.py def test_html(request):#方案一# from django.template import loader# 1. 使用loader加载模板# t loader.get_…

WIFI实现透传+接线图

单片机通过TX接WIFI模块的RX将设置的AT代码写入WIFI模块&#xff08;连接WIFI调为设备模式&#xff08;有设备&#xff0c;路由&#xff0c;双模等模式&#xff09;&#xff09; WIFI模块将响应信号通过TX通过CH340发给PC的RX 通过STC-ISP或安信可串口调试助手查看响应信息 …

Parallels Desktop20最新版本虚拟机 让双系统无缝切换成为现实!

Parallels Desktop 20最新版本虚拟机&#xff1a;让双系统无缝切换成为现实&#xff01; 嘿&#xff0c;各位小伙伴们&#xff5e;&#x1f389; 如果你是像我一样&#xff0c;既爱 Windows 又放不下 macOS 的纠结星人&#xff0c;那今天这篇分享你可要仔细看啰&#xff01;&am…

Linux学习笔记9 文件系统的基础

一、查看文件组织结构 Linux中一切都是文件。 Linux和Win的文件系统不是一个结构&#xff0c;Linux存在的根目录是所有目录的起点。 所有的存储空间和设备共享一个根目录&#xff0c;不同的磁盘块和分区挂载在其下&#xff0c;成为某个子目录的子目录&#xff0c;甚至设备也挂…

Windows系统部署redis自启动服务【亲测可用】

文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…

图像识别解决方案

图像识别解决方案是一种基于人工智能技术的图像处理和识别方法&#xff0c;能够实现对图像内容的自动分析和理解。以下是朗观视觉小编对图像识别解决方案的详细阐述&#xff1a; 一、技术原理 图像识别解决方案的核心原理是机器学习算法和深度学习网络。通过收集大量的图像数据…

【数据丢失不再怕】新手体验四款恢复数据神器

作为一个电脑新手&#xff0c;我最近遇到了一个让人头疼的问题——不小心删除了一些重要的文件&#xff01;那种感觉&#xff0c;就像是心爱的玩具突然找不到了&#xff0c;整个人都慌了。但是&#xff0c;别担心&#xff0c;我找到了四款数据恢复工具&#xff0c;它们就像我的…

Unity接入人工智能

在Unity接入人工智能中&#xff0c;本篇实现了接入百度智能云ai进行npc智能对话&#xff0c;通过http方式&#xff0c;并非插件&#xff0c;适合于所有支持Http链接的Unity版本。对于Chartgpt可以参考本篇内容的实现过程。 1-4节讲解测试&#xff0c;第5节讲解Unity中的实现&a…

15分钟学Go 第5天:数据类型

第5天&#xff1a;数据类型 在Go语言中&#xff0c;数据类型是构成程序的重要基础&#xff0c;它们定义了可以在程序中使用的数据特征。了解不同的数据类型及其用途将帮助我们更有效地编写Go代码。在本章节中&#xff0c;我们将详细探讨Go语言的基本数据类型。 1. 数据类型的…

jmeter发送post请求

在jmeter中&#xff0c;有两种常用的请求方式&#xff0c;get和post.它们两者的区别在于get请求的参数一般是放在路径中&#xff0c;可以使用用户自定义变量和函数助手等方式进行参数化&#xff0c;而post请求的参数不能随url发送&#xff0c;而是作为请求体提交给服务器。而在…

Linux 手撕线程池

前言 线程池 是 池化技术 中很典型的一个&#xff0c;它旨在高效的管理和复用线程资源&#xff01;在现在的计算机体系中&#xff0c;线程是执行任务&#xff08;调度&#xff09;的基本单位。然而&#xff0c;频繁的创建和销毁线程也会带来较大的开销&#xff0c;包括系统资源…

Unity之XR Interaction Toolkit 射线拖拽3DUI

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、想实现的功能二、实现原理1.UI挂在XRGrabInteractable、刚体、BoxCollder2.修改刚体属性3.加BoxCollder 总结 前言 VR项目里正常情况有放置两种3DUI的方式…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图&#xff1a; 考虑到公司业务主要是相机&#xff0c;所以&#xff0c;主要去关注图像数据流&#xff0c;对于音频数据流直接忽略。 图像数据流向&#xff1a; Camera Sensor将光信号转换成电信号&#xff08;Raw数据&…

指针——函数指针数组

&#xff08;一&#xff09;前文回顾 1、前篇代码分析 void(*signal(int , void(*)(int)))(int) ; 那么这串代码究竟是什么呢&#xff1f; 别慌&#xff0c;让我们来一步一步拆解&#xff0c;首先我们通过之前的学习&#xff0c;已经明白了什么是函数指针&#xff08;如果有…

基于Python实现“气象家园”自动签到

一、安装库 pip install OAFuncs 二、导入库 from OAFuncs.oa_sign.meteorological import sign_in_meteorological_home as sign三、签到 email your_email # 16031215qq.com password your_pwd sign(email, password…

VS Code开发qt项目

没整明白&#xff0c;尴尬 安装扩展 设置cmake路径 前提是已经安装了QT 报错 用msvc选windows启动&#xff0c;用mingw则选gdb启动

基于语音识别的停车共享小程序(lw+演示+源码+运行)

目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…

飞腾X100适配Ubuntu说明

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器

目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR&#xff08;无类别域间路由&#xff09; 目的IP & 当前路由器的子网掩码 …