opencv图像线性混合操作

来源:互联网 发布:软件开发认证证书 编辑:程序博客网 时间:2024/05/18 11:25

图像线性混合的数学原理

G(x)=(1-a)F(x)+aQ(x)

注意事项:

1,a的取值范围为0到1之间

2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像

3,通过对两幅图像的每个像素值做线性加权得到最终的输出图像

4,两幅图像的大小和类型必须完全一致,如果把图像当成一个矩阵

则两个矩阵相加的前提是维度必须一致,否则没有相加的意义。


示例

第一幅参与混合的图像


第二幅参与混合的图像


混合结果


通过混合产生了烟雨朦胧的效果

代码实现

#include <opencv2\core\core.hpp>#include <opencv2\imgcodecs.hpp>#include <opencv2\opencv.hpp>#include <opencv2\highgui\highgui.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** args){Mat src1, src2, dst;src1 = imread("mogu.jpg");src2 = imread("rain.jpg");if (!src1.data){printf("图像加载错误");return -1;}if (!src2.data){printf("图像加载错误");return -1;}double alpha = 0.5;//混合权重//混合的两幅图像宽高和类型必须完全一致if (src1.rows==src2.rows&&src1.cols==src2.cols&&src1.type()==src2.type()){addWeighted(src1,alpha,src2,(1.0-alpha),0.0,dst);//线性混合//add(src1,src2,dst);//相加//multiply(src1,src2,dst);//相乘imshow("原图-1", src1);imshow("原图-2",src2);imshow("混合后的图",dst);}else{printf("两幅图像的大小或者类型不一致,不能混合!");return -1;}waitKey(0);return 0;}



原创粉丝点击