Opencv基础入门笔记05:addWeight与multiply
函数简介。
1.addWeighted
它这个函数能实现图像线性混合效果,就像是PPT的动画效果那样,两层图像融合在一起,注意叠加混合和线性混合是不同的线性混合是将两幅图融合在一起,朦朦胧胧那种
用到的数学公式:
其中,a为比例系数;f0(x),f1(x)为输入的两张图片对应的像素值。
两张图片的大小,类型,深度必须一致。
CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype=-1);
1、 第1个参数,输入图片1,
2、第2个参数,图片1的融合比例
3、第3个参数,输入图片2
4、第4个参数,图片2的融合比例
5、第5个参数,偏差
6、第6个参数,输出图片
话不多说,上一张图来看效果。
2.multiply()
这个函数,简单来讲,就是能实现大小,类型深度一致的两张图片其对应像素值相乘,
multiply(src1, src2, dst, 1.0);
src1,src2是输入的两张图片,dst为输出图片,后面的是double数据,我这里用1.0,演示与addWeight的区别。
效果图
发现两个函数实现的效果相差很远,其实是用像素的归一化函数可以解决。
以上两个实现效果的源码如下:
int main(int argc, char** argv) {
Mat src1, src2, dst;
src1 = imread("E:\\360downloads\\07.jpg");
src2 = imread("E:\\360downloads\\08.jpg");
if (!src1.data) {
cout << "could not load image Linux Logo..." << endl;
return -1;
}
if (!src2.data) {
cout << "could not load image WIN7 Logo..." << endl;
return -1;
}
double alpha = 0.5;
if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {
resize(src1,src1, Size(800, 800));
resize(src2,src2, Size(800, 800));
//addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
multiply(src1, src2, dst, 1.0);
imshow("flower1", src1);
imshow("flower2", src2);
namedWindow("blend demo", WINDOW_AUTOSIZE);
imshow("blend demo", dst);
}
else {
printf("could not blend images , the size of images is not same...\n");
return -1;
}
匆忙写个简单笔记复习,待更。