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;
}

=================================================================================================

两幅图片:

2020.10.29 使用OpenCV进行图像线性叠加 [OpenCV练习 C++]

权重为0.4的线性叠加效果

2020.10.29 使用OpenCV进行图像线性叠加 [OpenCV练习 C++]

两幅图片直接相加的效果(挺生硬的):

2020.10.29 使用OpenCV进行图像线性叠加 [OpenCV练习 C++]

两幅图相乘的结果:

2020.10.29 使用OpenCV进行图像线性叠加 [OpenCV练习 C++]