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! \n"); return false; }
    if( !logoImage.data ) { printf("logoImage dont exist! \n"); 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! \n"); return false; }
	if( !srcImage3.data ) { printf("srcImage3 dont exist! \n"); 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! \n"); return false; }
	if( !logoImage.data ) { printf("logoImage dont exist! \n"); 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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM