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 -1;//或exit(1);使程序完全退出,返回到操作系统
	}
	if (!logoImage.data) {
		printf("读取logoImage错误!\n");
		return -1;
	}
	//定义一个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区域

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衣带渐宽人憔悴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值