OpenCV 兩張圖片合並


  原理:

       兩張圖片合並,想想圖片是用一個個像素點來存儲,每個像素點有他的值。那么合並,無非就是像素點值得合並,使用的公式可以就是給兩張圖片分別一個權值,然后求和。向下面這個公式:

的值位於0至1之間

OpenCV實現:
那么我們在openCV內怎么實現呢?在openCV中,有一個addWeighted函數,函數具體調用可以看這里。

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

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

調用addWeighted函數,

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

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

其實addWeighted的過程是下面的公式:

      這里的Y是0.0。

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

 1 #include <cv.h>
 2 #include <opencv2/core/core.hpp>  
 3 #include<opencv2/highgui/highgui.hpp>  
 4 #include <highgui.h>
 5 #include <iostream>
 6  
 7 using namespace cv;  8  
 9 int main() 10 { 11     double alpha = 0.5; double beta; double input; 12  
13  Mat src1, src2, dst; 14  
15     /// Ask the user enter alpha
16     std::cout << " Simple Linear Blender " << std::endl; 17     std::cout << "-----------------------" << std::endl; 18     std::cout << "* Enter alpha [0-1]: "; 19     std::cin >> input; 20     
21     /// We use the alpha provided by the user if it is between 0 and 1
22     if (input >= 0.0 && input <= 1.0) 23  { 24         alpha = input; 25  } 26  
27     /// Read image ( same size, same type ),注意,這里一定要相同大小,相同類型,否則出錯
28     src1 = imread("zh.png"); 29     src2 = imread("zh2.png"); 30  
31     if (!src1.data) { printf("Error loading src1 \n"); return -1; } 32     if (!src2.data) { printf("Error loading src2 \n"); return -1; } 33  
34     /// Create Windows
35     namedWindow("Linear Blend", 1); 36  
37     beta = (1.0 - alpha); 38     addWeighted(src1, alpha, src2, beta, 0.0, dst); //這里調用了addWeighted函數,得到的結果存儲在dst中
39  
40     imshow("Linear Blend",dst); 41  
42  waitKey(); 43     return 0; 44 }

結果:

圖片1:

圖片2:

合並后的圖片:

 


免責聲明!

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



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