zoukankan      html  css  js  c++  java
  • opencv之图像叠加与图像混合

    opencv之图像叠加与图享混合

    • ROI区域
    cv::Mat image_roi = image(cv::Rect(x, y, width, height));
    cv::Mat image_roi = image(cv::Range(y, y + height), cv::Range(x, x + width));
    
    • 线性混合
    void addWeighted(InputArray src1, double alpha, InputArray src2,
                     double beta, double gamma, OutputArray dst, int dtype = -1);
    

    注: dst = src1[I] * alpha + src2[I] * beta + gamma

    • 实例
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    bool  ROI_AddImage()
    {
        Mat srcImage1= imread("/home/test/dota_pa.jpg");
        Mat logoImage= imread("/home/test/dota_logo.jpg");
        if( !srcImage1.data ) { printf("srcImage1 dont exist! 
    "); return false; }
        if( !logoImage.data ) { printf("logoImage dont exist! 
    "); return false; }
    
        // create roi
        Mat imageROI= srcImage1(Rect(200,250,logoImage.cols,logoImage.rows));
        // create mask
        Mat mask= imread("dota_logo.jpg",0);
        
        logoImage.copyTo(imageROI,mask);
        namedWindow("ROI_AddImage");
        imshow("ROI_AddImage",srcImage1);
    
        return true;
    }
    
    bool  LinearBlending()
    {
    	double alphaValue = 0.5; 
    	double betaValue = 1.0 - alphaValue;
    	Mat srcImage2, srcImage3, dstImage;
    	srcImage2 = imread("/home/test/mogu.jpg");
    	srcImage3 = imread("/home/test/rain.jpg");
    	if( !srcImage2.data ) { printf("srcImage2 dont exist! 
    "); return false; }
    	if( !srcImage3.data ) { printf("srcImage3 dont exist! 
    "); return false; }
    
      // line blending
    	addWeighted( srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);
    	imshow( "raw_image", srcImage2 );
    	imshow( "LinearBlending", dstImage );
    
    	return true;
    }
    
    bool  ROI_LinearBlending()
    {
    	Mat srcImage4= imread("/home/test/dota_pa.jpg",1);
    	Mat logoImage= imread("/home/test/dota_logo.jpg");
    	if( !srcImage4.data ) { printf("srcImage4 dont exist! 
    "); return false; }
    	if( !logoImage.data ) { printf("logoImage dont exist! 
    "); return false; }
    
    	Mat imageROI = srcImage4(Rect(200,250,logoImage.cols,logoImage.rows));
    	//imageROI= srcImage4(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));
        
    	addWeighted(imageROI,0.5,logoImage,0.3,0.,imageROI);
    	imshow("ROI_LinearBlending",srcImage4);
    
    	return true;
    }
    
    int main(   )
    {
    	if(ROI_AddImage( )&& LinearBlending( )&&ROI_LinearBlending( ))
    	{
    		cout<<endl<<"yes!";
    	}
    
    	waitKey(0);
    	return 0;
    }
    

    注: 使用roi和mask方式,添加图标

    注:使用addWeighted()混合两张图像。

    注:也可以使用roi和addWeighted()方式,添加图标

    Mat imageROI = srcImage4(Rect(200,250,logoImage.cols,logoImage.rows));
    addWeighted(imageROI,0,logoImage,1,0.,imageROI);
    imshow("ROI_LinearBlending",srcImage4);
    
  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/ChrisCoder/p/10260796.html
Copyright © 2011-2022 走看看