使用C++写的OpenCV图像混合

图像的混合

需注意的要点:两张图片的大小和类型必须一致才行
用到的核心函数:

addWeighted(src, alpha, src2, (1.0 - alpha), 0.0, dst);
src :输入的第一个数组
alpha:输入的第一个数组的权重,即改变其透明度
src2:输入的第二个数组
(1.0 - alpha):输入的第二个数组的权重,即改变其透明度
0.0 :加到每个suml的标量
dst :输出阵列,与输入阵列具有相同的通道大小和数量

/*
 图像混合
 注意
 所选的图片类型、大小需要相同
*/
#include 
#include 
using namespace cv;
using namespace std;
int main()
{
    // 
    Mat dst;
    Mat src = imread("E:/Learning_AI/OpenCV_C++/1.jpg");
    Mat src2 = imread("E:/Learning_AI/OpenCV_C++/122.jpg");
  //如果两张图片大小不同可以用该函数输出相同的两张图片
    resize(src,src,Size(400,300));        //将图片src转换为大小为400,300的
    resize(src2, src2, Size(400, 300));   //将图片src转换为大小为400,300的

    if (src.empty())
    {
        cout << "can't open image" << endl;
    }
    if (src2.empty())
    {
        cout << "can't open image2 " << endl;
    }
    double alpha = 0.5;   //所占的权重可自行修改0-1 
    if (src.rows == src2.rows && src.cols == src2.cols && src.type() == src2.type())
    {
    
        addWeighted(src, alpha, src2, (1.0 - alpha), 0.0, dst);   //dst是输出的图像
             //alpha第一个数组所占的权重 ,(1.0 - alpha)第二个数组所占的权重
        
        namedWindow("blend_demo", WINDOW_NORMAL);
        imshow("blend_demo", dst);
    }
    else    //提示语句
    {
    
        cout << "could not bland image,the size of is not same ..." << endl;
        return 0;
    }
    

    waitKey(0);
    return 0;
}

!输入图片一](https://img-blog.csdnimg.cn/20210121194908206.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU4NDI5Nw==,size_16,color_FFFFFF,t_70#pic_center)
使用C++写的OpenCV图像混合_第1张图片
使用C++写的OpenCV图像混合_第2张图片

你可能感兴趣的:(OpenCV学习,opencv,计算机视觉)