OpenCV-C++选择提取感兴趣区域(ROI区域)附用鼠标选取ROI区域的代码

Posted 昊虹AI笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-C++选择提取感兴趣区域(ROI区域)附用鼠标选取ROI区域的代码相关的知识,希望对你有一定的参考价值。

在图像处理中,我们常常要对某个区域进行选择、提取,然后对这个区域进行单独分析、处理、显示。
这样的区域我们称为叫ROI区域,英文全称为Region of interest,中文名为“感兴趣区域”。

在OpenCV中主要是使用类Rect来实现对ROI区域的选择。

可以用类Rect的构造函数Rect()返回一个Rect对象,该对象表示一个矩形区域。

构造函数Rect()的带参数示例代码如下:

cv::Rect(xRoi, yRoi, widthRoi,heightRoi)

xRoi表示矩形区域左上顶点的x坐标;
yRoi表示矩形区域左上顶点的y坐标;
widthRoi表示矩形区域的宽度;
heightRoi表示表示矩形区域的高度。

完整的示例代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;


int main()

	// 源图像载入及判断
	cv::Mat srcImage = cv::imread("F:/material/images/P0003-view-2.jpg");
	if (!srcImage.data)
		return 1;

	cv::imshow("srcImage", srcImage);
	
	// 利用Rect选择矩形区域(左上角的坐标为(0,200),宽度为200,高度为100)
	int xRoi = 0;
	int yRoi = 200;
	int widthRoi = 200;
	int heightRoi = 100;

	cv:Mat ROI_img(srcImage, cv::Rect(xRoi, yRoi, widthRoi, heightRoi));

	cv::imshow("ROI_img", ROI_img);

	cv::waitKey(0);

	return 0;


运行结果如下:

也可先构造一个不带参数的Rect对象,然后根据要选择的矩形区域设置对应的成员变量值。
此种方法的示例代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;


int main()

	// 源图像载入及判断
	cv::Mat srcImage = cv::imread("F:/material/images/P0003-view-2.jpg");
	if (!srcImage.data)
		return 1;

	cv::imshow("srcImage", srcImage);

	// 利用Rect选择矩形区域(左上角的坐标为(0,200),宽度为200,高度为100)

	cv::Rect roiRect;
	
	roiRect.x = 0;
	roiRect.y = 200;
	roiRect.width = 200;
	roiRect.height = 100;

	cv:Mat ROI_img(srcImage, roiRect);

	cv::imshow("ROI_img", ROI_img);

	cv::waitKey(0);

	return 0;

运行结果如下:

为了提高对ROI区域选择的灵活性,我们还可以结合OpenCV的窗口鼠标事件实现用鼠标的拖动去选择感兴趣区域。
关于合OpenCV的窗口鼠标事件的相关知识,可参考页面 https://www.hhai.cc/thread-99-1-1.html

用鼠标去选择感兴趣区域的示例代码请大家参看本博文的原文,链接如下:
https://www.hhai.cc/thread-127-1-1.html

在上面的代码中, roiRect就是我们用鼠标选择得到的感兴趣区域,而图像roiMat就是感兴趣区域对应的图像,大家可修改此代码使其适合自己使用。

运行结果如下:

以上是关于OpenCV-C++选择提取感兴趣区域(ROI区域)附用鼠标选取ROI区域的代码的主要内容,如果未能解决你的问题,请参考以下文章

基于opencv的感兴趣区域ROI的操作

ROI

请问大虾们,opencv如何只对图像选择区域提取特征点

感兴趣区域ROI

图像处理中ROI是啥意思

用Python-OpenCV提取图像中的感兴趣区域以及图像的深拷贝和浅拷贝问题附示例代码