8-感兴趣区域ROI图像获取操作

====================分割线====================


       上一节最后部分中,我们在处理两个图像尺寸不同时要融合过程中,提到了利用ROI,那么什么是ROI呢?

       在图像处理中,我们常常需对图像中某个重点区域进行分析处理,而不改变图像中的其他区域,因此这就要从整幅图像中提取感兴趣区域ROI(region of interest)。OpenCV中常常用到Rect来设置相应的ROI。下面我们通过一个demo来简单的了解是如何提取感兴趣区域ROI。

=====================分割线===================

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 
using namespace cv;
using namespace std;
/*
在图像处理中,我们常常需对图像中某个重点区域进行分析处理,
而不改变图像中的其他区域,因此这就要从整幅图像中提取感兴趣区域ROI(region of interest)
OpenCV中常常用到Rect来设置相应的ROI。
下面我们通过一个demo来简单的了解是如何提取感兴趣区域ROI。

*/

//1 全局变量
Mat g_srcImage;//源图像
Mat g_roiImage;//提取制定坐标区域ROI图像

//2 getROI()函数声明,获取ROI及显示
void getROI(int xRoi, int yRoi, int widthRoi, int heightRoi);

int main()
{
	//3 读取源图像并检查图像是否读取成功
	g_srcImage = imread("demo01.jpg");
	if (g_srcImage.empty())
	{
		cout << "读取图像有误,请重新输入正确路径" << endl;
		return -1;
	}
	imshow("源图像", g_srcImage);//窗口显示源图像
	cout << "源图像g_srcImage的行高:" << g_srcImage.rows << ",列宽:" << g_srcImage.cols << endl;

	//4 利用Rect选择区域(150,170,350,200)
	int xRoi = 50;
	int yRoi = 70;
	int widthRoi = 50;
	int heightRoi = 20;
	getROI(xRoi,yRoi,widthRoi,heightRoi);//改变其中的四个变量的值,即可以调整ROI的位置及其尺寸 

	//5 输出信息并保持等待状态
	cout << "ROI图像g_roiImage的行高:" << g_roiImage.rows << ",列宽:" << g_roiImage.cols << endl;
	waitKey(0);
	return 0;
}

void getROI(int xRoi, int yRoi, int widthRoi, int heightRoi)
{
	//将感兴趣区域复制到输出图像roiImage上。 方式一:
	g_srcImage(Rect(xRoi,yRoi,widthRoi,heightRoi)).copyTo(g_roiImage);
	/*
	方式二:
	roiImage = g_srcImage(Rect(xRoi, yRoi, widthRoi, heightRoi));
	*/
	imshow("提取的g_roiImage图像", g_roiImage);

}

阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页