• 05 OpenCV图像混合技术


    文章目录

    理论

    在这里插入图片描述
    其中 的取值范围为0~1之间

    算子

    addWeighted

    CV_EXPORTS_W void addWeighted(
        InputArray src1, 
        double alpha, 
        InputArray src2,                     
        double beta,
        double gamma, 
        OutputArray dst, 
        int dtype = -1
    );
    参数1:输入图像Mat – src1
    参数2:输入图像src1的alpha值
    参数3:输入图像Mat – src2
    参数4:输入图像src2的alpha值
    参数5:gamma值,添加到每个和的标量。
    参数6:输出混合图像
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    add

    void add(InputArray src1, 
            InputArray src2, 
            OutputArray dst,
            InputArray mask = noArray(), 
            int dtype = -1
    );
    InputArray类型的src1 ,第一个输入数组或scalar。
    
    InputArray类型的src2 ,第二个输入数组或scalar。
    
    OutputArray类型的dst ,输出图像,图像的尺寸、通道数和输入图像相同。
    
    InputArray类型的mask,可选操作掩码-8位单通道数组,指定要更改的输出数组元素。
    
    int类型的dtype,输出数组的可选深度。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    subtract

    void subtract(InputArray src1, 
            InputArray src2, 
            OutputArray dst,
            InputArray mask = noArray(), 
            int dtype = -1
    );
    InputArray类型的src1 ,第一个输入数组或scalar。
    
    InputArray类型的src2 ,第二个输入数组或scalar。
    
    OutputArray类型的dst ,输出图像,图像的尺寸、通道数和输入图像相同。
    
    InputArray类型的mask,可选操作掩码-8位单通道数组,指定要更改的输出数组元素。
    
    int类型的dtype,输出数组的可选深度。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    multiply

    void multiply(InputArray src1, 
            InputArray src2, 
            OutputArray dst,
            double scale = 1,
            int dtype = -1
    );
    InputArray类型的src1 ,第一个输入数组或scalar。
    
    InputArray类型的src2 ,第二个输入数组或scalar,尺寸和类型要与src1一致。
    
    OutputArray类型的dst ,输出图像,尺寸和类型要与src1一致。
    double类型的scale,可选比例因子。
    int类型的dtype,输出数组的可选深度。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    divide

    void divide(InputArray src1, 
            InputArray src2, 
            OutputArray dst,
            double scale = 1,
            int dtype = -1
    );
     
    void divide(double scale, 
            InputArray src2,                         
            OutputArray dst, 
            int dtype = -1
    );
    
    InputArray类型的src1 ,第一个输入数组或scalar。
    InputArray类型的src2 ,第二个输入数组或scalar,尺寸和类型要与src1一致。
    OutputArray类型的dst ,输出图像,尺寸和类型要与src1一致。
    double类型的scale,scalar因子。
    int类型的dtype,输出数组的可选深度。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    示例

    #include 
    #include 
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char** argv) {
    	Mat src1, src2, dst;
    	src1 = imread("D:/vcprojects/images/LinuxLogo.jpg");
    	src2 = imread("D:/vcprojects/images/win7logo.jpg");
    	if (!src1.data) {
    		cout << "could not load image Linux Logo..." << endl;
    		return -1;
    	}
    	if (!src2.data) {
    		cout << "could not load image WIN7 Logo..." << endl;
    		return -1;
    	}
    
    	double alpha = 0.5;
    	if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {
    		addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
    		// multiply(src1, src2, dst, 1.0);//两个图片相乘
    		
    		imshow("linuxlogo", src1);
    		imshow("win7logo", src2);
    		namedWindow("blend demo", CV_WINDOW_AUTOSIZE);
    		imshow("blend demo", dst);
    	}
    	else {
    		printf("could not blend images , the size of images is not same...\n");
    		return -1;
    	}
    
    	waitKey(0);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述

  • 相关阅读:
    力扣最热一百题——盛水最多的容器
    24计算机考研调剂 | 重庆工商大学
    聊聊logback的ThresholdFilter
    Java 21 新特性:switch的模式匹配
    基于Java演唱会购票系统设计实现(源码+lw+部署文档+讲解等)
    Linux常见命令
    什么是接口自动化?为什么要做?和怎么做接口自动化?
    0.96OLED 4针IIC STM32-HAL库版本(附源码)
    由CPU高负载引发内核探索之旅
    Tomcat性能监控
  • 原文地址:https://blog.csdn.net/weixin_45672157/article/details/136406161