OpenCV兩張圖片的合並


轉載請注明出處。。!

http://blog.csdn.net/zhonghuan1992



OpenCV兩張圖片的合並






     原理:

       兩張圖片合並,想想圖片是用一個個像素點來存儲。每一個像素點有他的值。

那么合並,無非就是像素點值得合並,使用的公式能夠就是給兩張圖片分別一個權值。然后求和。向以下這個公式:

       的值位於0至1之間

     OpenCV實現:

       那么我們在openCV內怎么實現呢?在openCV中,有一個addWeighted函數。函數詳細調用能夠看這里

讀取完兩個要合並的圖片后。(注意。這里合並的圖片必須是同樣的size和type,就是說圖片長寬像素數一樣。color存儲方式要一樣。我選的是388*388的png圖片

/// Read image ( same size, same type )
       src1= imread("zh.png");
       src2= imread("zh2.png");


調用addWeighted函數。

beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0,dst);


       這里src1和src2都是讀取之后的矩陣,alpha和beta是他們的權重。

事實上addWeighted的過程是以下的公式:

       這里的Y是0.0。

       好,讓我們動手來做這個操作。代碼例如以下:

#include <cv.h>
#include <opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>  
#include <highgui.h>
#include <iostream>

using namespace cv;

int main()
{
	double alpha = 0.5; double beta; double input;

	Mat src1, src2, dst;

	/// Ask the user enter alpha
	std::cout << " Simple Linear Blender " << std::endl;
	std::cout << "-----------------------" << std::endl;
	std::cout << "* Enter alpha [0-1]: ";
	std::cin >> input;
	
	/// We use the alpha provided by the user if it is between 0 and 1
	if (input >= 0.0 && input <= 1.0)
	{
		alpha = input;
	}

	/// Read image ( same size, same type ),注意,這里一定要同樣大小。同樣類型,否則出錯
	src1 = imread("zh.png");
	src2 = imread("zh2.png");

	if (!src1.data) { printf("Error loading src1 \n"); return -1; }
	if (!src2.data) { printf("Error loading src2 \n"); return -1; }

	/// Create Windows
	namedWindow("Linear Blend", 1);

	beta = (1.0 - alpha);
	addWeighted(src1, alpha, src2, beta, 0.0, dst); //這里調用了addWeighted函數,得到的結果存儲在dst中

	imshow("Linear Blend",dst);

	waitKey();
	return 0;
}

結果:

圖片1:

 

圖片2:

 

合並后的圖片:


免責聲明!

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



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