OpenCV3之——感兴趣区域ROI(region of interest)

       在图像处理领域,常常需要设置感兴趣区域来专注或者简化工作过程,也就是从图像中选择一个图像区域,这个区域是图像分析所关注的重点。

       定义ROI区域有两种方法:

Mat imageROI;
//方法一
imageROI = image(Rect(pos_left,pos_top,logo.cols,logo.rows));//前两个参数是相对于原图像的坐标,后两个参数是ROI区域的宽和高
//方法二
imageROI = image(Range(250,250+logo.rows),Range(200,200+logo.cols));//指定行和列的范围来定义ROI

       下面通过一个图像掩膜(mask),直接将插入处的像素设置为logo图像的像素值,这样效果会很逼真

#include <opencv2/opencv.hpp>
using namespace cv;


#define WINDOW_NAME "图像掩膜混合效果"


//ROI_AddImage()函数,利用感兴趣区域RIO实现图像叠加
int main() {
	//读入图像
	Mat srcImage1 = imread("dota.jpg");
	Mat logoImage = imread("dota_logo.jpg");
	if (!srcImage1.data) {
		printf("读取srcImage1错误!\n"); 
		return false;
	}
	if (!logoImage.data) {
		printf("读取logoImage错误!\n");
		return false;
	}
	//定义一个Mat类型并给其设定ROI区域
	Mat imageROI = srcImage1(Rect(560, 240, logoImage.cols, logoImage.rows));
	//加载掩膜(必须是灰度图)


	Mat mask = imread("dota_logo.jpg", 0);
	//Mat mask = logoImage.clone();
	//Mat mask(imageROI.rows, imageROI.cols, imageROI.depth(), Scalar(1));


	//将掩膜复制到ROI
	logoImage.copyTo(imageROI, mask);//mask可以实现蒙板的功能
	//显示结果
	namedWindow(WINDOW_NAME);
	imshow(WINDOW_NAME, srcImage1);
	waitKey(0);
	return 0;
}

下面是使用mask与否的区别:

<1>使用mask即:执行logoImage.copyTo(imageROI, mask); 

运行结果:


<2>不使用mask即:执行logoImage.copyTo(imageROI); 直接将logo像素复制到ROI区域

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_35294564/article/details/81044618