====================分割线====================
上一节最后部分中,我们在处理两个图像尺寸不同时要融合过程中,提到了利用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);
}