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

OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用

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

算法描述

允许用户在给定的图像上选择一个感兴趣区域(ROI)。

该功能创建一个窗口,并允许用户使用鼠标来选择一个 ROI。控制方式:使用空格键或回车键完成选择,使用 ‘c’ 键取消选择(此时函数将返回一个零值的 cv::Rect)

cv::selectROI 是 OpenCV 中用于让用户交互式地选择图像中的一个矩形区域的函数。该函数允许用户通过鼠标在图像上绘制一个矩形框来选择一个区域。选择完成后,函数会返回所选区域的位置和大小。

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

函数原型


Rect cv::selectROI
(
	const String & 	windowName,
	InputArray 	img,
	bool 	showCrosshair = true,
	bool 	fromCenter = false,
	bool 	printNotice = true 
)		

参数

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

返回值

返回一个 cv::Rect 对象,包含了所选区域的位置和大小信息(x, y, width, height)。如果取消返回空。

代码示例


#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 winname = "Select ROI";
    cv::namedWindow( winname, cv::WINDOW_NORMAL );

    // 显示图像
    cv::imshow( winname, img );

    // 选择 ROI
    cv::Rect roi = cv::selectROI( winname, img, false, false );

    // 打印所选区域的信息
    std::cout << "Selected ROI: " << roi << std::endl;

    // 在原图上画出所选区域的边界框
    cv::rectangle( img, roi, cv::Scalar( 0, 255, 0 ), 2 );

    // 显示带有边界框的图像
    cv::imshow( winname, img );
    cv::waitKey( 0 );

    // 关闭所有窗口
    cv::destroyAllWindows();

    return 0;
}

运行结果

我们可以鼠标左键选中一个点,摁住不放就可以选自己想选的矩形框,选好了松开左键就可以了。
在这里插入图片描述


http://www.kler.cn/news/350865.html

相关文章:

  • 基于.NET 8.0,C#中Microsoft.Office.Interop.Excel来操作office365的excel
  • 软考(中级-软件设计师)算法分析篇(1024)
  • Spring Cloud --- GateWay和Sentinel集成实现服务限流
  • 混合精度量化的实现
  • SQL实战测试
  • 短剧AI突围战,百度跑偏了
  • vue elementui table编辑表单时,弹框增加编辑明细数据
  • STM32 | STM32F4OTA_ESP8266_Bootloader为引导程序远程更新的代码(APP)
  • Leetcode—1117. H2O 生成【中等】(多线程)
  • 【QT】常用控件(一)
  • DevExpress WPF中文教程:Data Grid(数据网格)实现细节一览
  • 【ChatGPT】编写结构化 Prompt 的技巧
  • 搜维尔科技:使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据
  • HM NIS Edit无法选择安装程序语言
  • 在Docker中快速使用各个版本的Oracle数据库(10g、11g、12c、18c、19c、21c、23c)
  • 为什么react副作用函数叫hooks钩子函数,副作用指的是什么
  • Web组态数据联动
  • Go语言反射机制详解:通过反射获取结构体的字段和方法
  • 算法之排序
  • Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
  • shell错误修改
  • 无人机之放电速率篇
  • 浙大数据结构:KMP 字符串匹配算法比较
  • linux系统账号安全应该如何设置
  • 第2节 如何学习鸿蒙技术
  • React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件