感兴趣区域(ROI,region of interest),就是从图像中选择的一个图像区域,这个区域是图像分许所关注的重点,通过圈定这个区域,一边进一步的处理,而且使用ROI指定想读入的目标,可以减少处理时间,增加精度。
定义ROI由两种方法,第一种是使用表示矩形区域的Rect,它指定矩形的左上角坐标和矩形的长宽来定义矩形区域:
Mat image;
imageROI = image(Rect(500, 250, logo,cols, logo,rows));
另一种方法是指定感兴趣区域行或列的范围(Range),Range是指从其实索引到终止索引(不包括终止索引):
imageROI = image(Range(250, 250+logo.rows),range(500, 500+logo.cols));
具体的代码示例如下:
int main() {
Mat srcImage = imread("/Users/dwz/Desktop/cpp/dota_pa.jpg"); // 读取大图
Mat logoImage = imread("/Users/dwz/Desktop/cpp/dota_logo.jpg"); // 读取小图
// 定义Mat类型,并为其设定ROI区域
Mat imageROI = srcImage(Rect(100, 150, logoImage.cols, logoImage.rows));
Mat mask;
// 获取掩膜
cvtColor(logoImage, mask, COLOR_BGR2GRAY);
// 将掩膜复制到ROI
logoImage.copyTo(imageROI, mask);
imwrite("ROI.jpg", srcImage);
return 0;
}
主要包括以下几个步骤:
- 首先读入两张图像,
- 然后定义Mat类型的imageROI,并使用Rect设置感兴趣区域,
- 接着定义Mat类型的mask,
- 使用copyTo把mask的内容复制到imageROI中,就得到了最终的效果图。
结果: