当前位置: 首页 > news >正文

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.lryc.cn/news/462955.html

相关文章:

  • 字节青训营入营考核部分题解
  • Android调用系统打印图片
  • 网络最快的速度光速,因此‘‘光网络‘‘由此产生
  • WPF -- LiveCharts的使用和源码
  • spring 如何将mutipartFile转存到本地磁盘
  • 【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想!
  • 模电基础(晶体管放大电路)
  • Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法)
  • rhce:列行性(at和cron)
  • kubernetes给service动态增加服务端口
  • 如何将 html 渲染后的节点传递给后端?
  • ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。
  • 牛客编程初学者入门训练——BC19 牛牛的对齐
  • log file sync 内部执行过程
  • 【动手学深度学习】7.5 批量规范化(个人向笔记)
  • 111 - exercise 5
  • 第二十五:IP网络层的数据,IP数据报
  • 三菱FX3UPLC机械原点回归- DSZR/ZRN指令
  • 网络通信与并发编程(三)粘包现象解决方案、socketserver实现并发
  • 使用Uniapp开发微信小程序实现一个自定义的首页顶部轮播图效果?
  • 软硬连接及动静态库
  • vue3.0 + vite:中使用 sass
  • 搭建`mongodb`副本集-开启权限认证 mongo:7.0.5
  • 智能工厂的软件设计 由“原力“篇引发的思考: 回顾、展望和本位 之2 修订稿之2
  • 2025选题推荐|基于SpringBoot的幼儿园智能管理与监控系统的设计与实现
  • mqtt客户端订阅一直重复连接?
  • SegFormer: 一个基于Transformer的高效视觉图像分割算法
  • SoC芯片中Clock Gen和Reset Gen的时钟树综合
  • 学习资料:电子标签拣货技术
  • Git 提交规范参考