1.图像的混合
图像的混合即把两张大小一样类型一致的图像合成一张图片。
(1)理论知识
线性混合操作的理论:
g(x)=(1-⍺)f₀(x)+⍺f₁(x)
其中⍺代表了每个图像占的权重,⍺的取值范围为0~1之间。通过对⍺值的调整可以使得两张图片得到更好的融合。
(2)相关api
使用addWeighted(cv::InputArray src1, 输入图像1
double alpha, 输入图像1的alpha值
cv::InputArray src2, 输入图像2
double beta, 输入图像2的alpha值
double gamma, 这个是校验值,默认为0
cv::OutputArray dst, 输出混合图像
int type=-1
)
在编程过程中注意判断一下两张图片大小类型是否一致。核心演示代码如下:
/**********************************************************/
/*************图像混合叠加*************************/
/***使用 addWeighted 融合两张图片,大小分辨率必须一致,否则会出错*****/
void ImageAddLinear(void)
{
Mat src1 = imread("E:/03OpenCV/PIC/a15.png");
imshow("image1", src1);
Mat src2 = imread("E:/03OpenCV/PIC/a16.png");
imshow("image2", src2);
double alpha = 0.5;
double beta;
double inputValue = 0.5;//改变此值可以得到不同的效果
Mat src15, src16, dst;
if (inputValue >= 0.0 && inputValue <= 1.0)
{
alpha = inputValue;
}
src15 = imread("E:/03OpenCV/PIC/a15.png");
src16 = imread("E:/03OpenCV/PIC/a16.png");
if (!src15.data) { printf("Error loading src15 \n"); return; }
if (!src16.data) { printf("Error loading src16 \n"); return; }
namedWindow("Linear Blend", 1);
beta = (1.0 - alpha);
addWeighted(src15, alpha, src16, beta, 0.0, dst);//
imshow("Linear Blend", dst);
imwrite("E:/03OpenCV/PIC/TestImageAddLinear.jpg", dst);//保存处理后的图片
}
效果还是不错的!