图像的线性混合
- 线性混合模型
![\large g\left ( x \right )=\left ( 1-\alpha \right )f_{0}\left ( x \right )+\alpha f_{1}\left ( x \right )](https://private.codecogs.com/gif.latex?%5Cdpi%7B120%7D%20%5Cfn_jvn%20%5Clarge%20g%5Cleft%20%28%20x%20%5Cright%20%29%3D%5Cleft%20%28%201-%5Calpha%20%5Cright%20%29f_%7B0%7D%5Cleft%20%28%20x%20%5Cright%20%29+%5Calpha%20f_%7B1%7D%5Cleft%20%28%20x%20%5Cright%20%29)
- α取值0-1
和
是src1和src2, 对应操作对象是像素
- API
- addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, Output dst, int dtype=-1);
- src1 ,src2 即输入图片
- alpha=1-beta
- gamma是平衡参数
- dst输出对象
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char ** argv)
{
Mat src0, src1;
src0 = imread("C:\\Users\\xujin\\Desktop\\test0.JPG");
if (!src0.data)
{
cout << "no image";
return -1;
}
namedWindow("src0_image", WINDOW_AUTOSIZE);
imshow("src0_image", src0);
src1 = imread("C:\\Users\\xujin\\Desktop\\test1.JPG");
if (!src1.data)
{
cout << "no image";
return -1;
}
namedWindow("src1_image", WINDOW_AUTOSIZE);
imshow("src1_image", src1);
if (src1.rows == src0.rows && src1.cols == src0.cols && src0.type() == src1.type())
{
Mat dst;
double alpha = 0.2;
double beta = 1 - alpha;
double gamma = 0.0;
int dtype = -1;
addWeighted(src0, alpha, src1, beta, gamma, dst, dtype);
//add(src0, src1, dst, Mat()); 没有参数值会过于生硬
//multiply(src1, src0, dst); 也是一种混合
namedWindow("dst_image", WINDOW_AUTOSIZE);
imshow("dst_image", dst);
}
else
{
cout << "not equal";
return -1;
}
waitKey(0);
return 0;
}