zoukankan      html  css  js  c++  java
  • OpenCV学习:实现简单的图像叠加

      本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下:

      1)线性融合  

       

      2)addWeighted函数

      //! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)

    CV_EXPORTS_W void addWeighted(InputArray src1,          
                  double alpha,           
                            InputArray src2,          
                  double beta,             
                  double gamma,
                  OutputArray dst,
                  
    int dtype=-1
                  
    );
    Parameters
    src1 – First source array.
    alpha – Weight for the first array elements.
    src2 – Second source array of the same size and channel number as src1 .
    beta – Weight for the second array elements.
    dst – Destination array that has the same size and number of channels as the input arrays.
    gamma – Scalar added to each sum.
    dtype – Optional depth of the destination array. When both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth().

      代码如下:

    //图像叠加(Mat)  
    #include <opencv2/opencv.hpp>  
    using namespace cv;
    using namespace std;
    
    int main( int argc, char** argv )
    {
        double alpha = 0.5; 
        double beta; 
        double input;
        Mat src1, src2, dst;
        /// 请输入alpha值
        cout<<" Simple Linear Blender "<<endl;
        cout<<"-----------------------"<<endl;
        cout<<"*Enter alpha [0-1]: ";
        
        /// 获取alpha输入    
        cin >> input;
        if( input >= 0.0 && input <= 1.0 )
        { 
            alpha = input; 
        }
        /// 加载相同尺寸,相同格式的两张图像
        src1 = imread("./Res/Windows7_logo.jpg");
        src2 = imread("./Res/Windows7_text.jpg");
        if( !src1.data ) 
        { 
            printf("Error loading src1 
    "); 
            return -1; 
        }
        if( !src2.data ) 
        { 
            printf("Error loading src2 
    "); 
            return -1; 
        }
    
        /// 创建显示窗口
        namedWindow("Image one", 1);
        namedWindow("Image two", 1);
        namedWindow("Linear Blend", 1);
    
        /// 执行线性融合
        beta = 1.0 - alpha;
        addWeighted( src1, alpha, src2, beta, 0.0, dst);
    
        /// 显示结果
        imshow( "Image one", src1 );
        imshow( "Image two", src2 );
        imshow( "Linear Blend", dst );
    
        /// 等待键盘事件
        waitKey(0);
        return 0;
    }

       运行结果:

      

      

  • 相关阅读:
    awk统计命令(求和、求平均、求最大值、求最小值)(转)
    高性能跨平台网络IO(Reactor、epoll、iocp)总结
    进程通信和同步(转)
    C++11原子操作与无锁编程(转)
    在线代码编译运行工具
    linux ps 命令的查看
    转: linux sed 命令的使用
    转:利用Eclipse CDT 阅读C/C++代码
    转:Raft一致性选举算法的ppt与视频
    转:ffmpeg time_base详解
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6513305.html
Copyright © 2011-2022 走看看