2020.10.29 使用OpenCV进行图像线性叠加 [OpenCV练习 C++]
注意采用的两张图像必须大小类型一致!
源代码:
=====================================================================================
// testOpencv05.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
description: 图像线性相加(带有权重)
*/
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
Mat image1 = imread("E:/3.jpg");
Mat image2 = imread("E:/4.jpg");
if (image1.empty() || image2.empty()) {
std::cout << "can not load image!" << std::endl;
return -1;
}
//线性叠加要保证两幅图像数据的大小以及类型一致
if (image1.rows == image2.rows && image1.cols == image2.cols && image1.type() == image2.type()) {
namedWindow("input image1", WINDOW_AUTOSIZE);
imshow("input image1",image1);
namedWindow("input image2", WINDOW_AUTOSIZE);
imshow("input image2", image2);
Mat outImage;
outImage.create(image1.size(), image1.type());
//线性叠加操作
double alpha = 0.4;//线性相加权重
addWeighted(image1,alpha,image2,(1.0-alpha),0.0,outImage);
//直接两幅图叠加操作
//add(image1,image2,outImage,Mat());
//两幅图像相乘操作
//multiply(image1, image2, outImage, 5);
namedWindow("output image", WINDOW_AUTOSIZE);
imshow("output image", outImage);
}
else
{
std::cout << "Two images have different types,so please check and change those images" << std::endl;
return -1 ;
}
waitKey(0);
return 0;
}
=================================================================================================
两幅图片:
权重为0.4的线性叠加效果
两幅图片直接相加的效果(挺生硬的):
两幅图相乘的结果: