OpenCV学习笔记11_Mask操作与图像叠加

一、掩膜操作Mask

在opencv功能(两点):

1、 逻辑运算模板mask;

可以理解为一个字帖模板,
能描的地方就看成是一个Mask,
后续的处理只针对这个Mask来操作

例如:

inline //内联函数
void GpuMat::copyTo(OutputArray dst, InputArray mask) const
{
    copyTo(dst, mask, Stream::Null());
}
//copyTo函数
CV_WRAP void copyTo(OutputArray dst, InputArray mask, Stream& stream) const;

/*
Src:
123	 13	 1
3	 23	 20
32	 1	 0
Mask :
0	13	1
3	23	0
0	1	24
Dst :
0	13	1
3	23	0
0	1	0*/

只复制了一部分,src与mask进行与操作运算;

2、 卷积核kernel

卷积核可以理解为运算规定,
kernel上是什么相应的像素就如何处理,
处理方式可以理解为简单的线性表出。

见OpenCV矩阵上的掩码操作

二、图像叠加

注意事项:
① 通道数相同;
② Size相同;
实现方法:

	//实现方法1--直接将logo的值拷贝到ROI区域
	logo.copyTo(Roi_add, logo_gray);
	//注意这句,原图(logo)与掩膜(logo_gray)进行与运算后得到了被复制图
	//其像素进行与操作,如果与运算后像素值为0则不拷贝。 
	//加载掩膜必须为灰度值(我的理解是降低与操作的运算量,但是参数解释说不是灰度图也可以)
	//实现方法2--使用add方法将ROI区域与logo相加
	add(Roi_add_1,logo ,Roi_add_1);
	//实现方法3--符号重载运算
	Roi_add_2 += logo;
	//实现方法4--加权叠加
	addWeighted(Roi_add_3,0.5,logo,0.5,1.0,Roi_add_3);

三、代码

#include 
using namespace std;
using namespace cv;

void main()
{
	Mat dst;
	Mat logo = imread("logo.png");
	Mat logo_gray;
	cvtColor(logo, logo_gray, COLOR_BGR2GRAY);
	Mat src = imread("test.jpg");
	Mat Roi_add = src(Rect(20,20,350, 84));//Size为logo的Size
	Mat Roi_add_1 = src(Rect(20, 104, 350, 84));
	Mat Roi_add_2 = src(Rect(20, 188, 350, 84));
	Mat Roi_add_3 = src(Rect(20, 188+84, 350, 84));
	//直接简单叠加
	//实现方法1--直接将logo的值拷贝到ROI区域
	logo.copyTo(Roi_add, logo_gray);//注意这句,原图(logo)与掩膜(logo_gray)进行与运算后得到了结果图
	//其像素进行与操作,如果与运算后像素值为0则不拷贝。 
	//加载掩膜必须为灰度值(我的理解是降低与操作的运算量,但是参数解释说不是灰度图也可以)

	//实现方法2--使用add方法将ROI区域与logo相加
/*	Mat bwt,fact;*/
/*	ones.ones(Size(350, 84), CV_8UC3);*/ //此句错误用法
// 	bitwise_and(logo, Roi_add_1, bwt);
// 	fact = Roi_add_1 - 255*logo;
/*	bitwise_or(Roi_add_1, logo, Roi_add_1, bwt);*/
	add(Roi_add_1,logo ,Roi_add_1);

	//实现方法3--符号重载运算
	Roi_add_2 += logo;
 
	
	//实现方法4--加权叠加
	addWeighted(Roi_add_3,0.5,logo,0.5,1.0,Roi_add_3);

	//注意涉及运算结果输出都为深拷贝

	/*dst = Roi_add + logo;*/

	/*addWeighted(Roi_add, 0, logo, 1, 1, Roi_add);*/
	

/*	imshow("dst", dst);*/
	imshow("src", src);
	waitKey(0);




}

你可能感兴趣的:(笔记,编程原理,图像处理,opencv,计算机视觉,c++)