图片可以用不同方式组合,就像矩阵运算,各个相对像素做加减乘除.这边介绍如何使用addweight()和add()函数将输入影像就行混合,addweighted()和add()只能处理相同大小的图片。
void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask= niArray(), int dtype=1)
- src1: 输入图或强度值
- src2: 输入图或强度值
- dst: 输出图,输出图和输入图有相同的尺寸和通道数
- mask: 可有可无的遮罩,8位元单通道图,指定那些像素要计算
- dtype: 可有可无的输出图深度
void addWeighted(InputArray src1, double alpha,InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)
- src1: 输入图或强度值
- alpha: src1的权重
- src2: 输入图或强度值,和src1的尺寸和通道数相同
- beta: src2的权重
- gamma: 两图相加后再增加的值
- dst: 输出图,输出矩阵和输入矩阵有相同的尺寸和通道数
- dtype: 可有可无的输出图深度
Mat imgA,imgB,imgC;
a[i]、b[i]、c[i]分别为三张图中的某个像素
add(imgA,imgB,imgC); //c[i] = a[i] + b[i];
add(imgA,Scalar(20),imgC); // c[i] = a[i] +20;
addWeighted(imgA,0.8,imgB,0.5,10,imgC); // c[i] = 0.8* a[i] +0.5*b[i] +10;
scaleAdd(imgA,1.2,imgB,imgC); // c[i] = 1.2*a[i] + b[i]
add(imgA,imgB,imgC,mask); // if(mask[i]) c[i] = a[i]+b[i]
------------------示例: ------------------------------------------------------------
Mat src1 = imread("input1.jpg",CV_LOAD_IMAGE_UNCHANGE);
Mat src2 = imread("input2,jpg",CV_LOAD_IMGAE_UNCHANGE);
Mat dst;
addWeighted(src1,0.5,src2,0.5,0,dst); //各占0.5的百分比相加图片
imshow("addWeightedImg",dst);
waitKey(0) ;