1. 程式人生 > >OpenCV基礎(三)---圖像混合

OpenCV基礎(三)---圖像混合

als ace tar put ios named enc 通道數 相同

圖像混合

圖像混合,產生的效果跨越了時間空間.

原理如下面公式,兩張原始圖像按權重相加,最終生成新圖像.

技術分享圖片

函數介紹:addWeighted()

函數原型:void addWeighted(InputArray src1, double alpha, InputArray src2,

     double beta, double gamma, OutputArray dst, int dtype = -1);

函數功能:計算兩個數組的加權和。

函數聲明:

InputArray src1::加權的第一個數組

double alpha:第一個數組的權重

InputArray src2:加權的第二個數組

double beta:第二個數組的權重

double gamma:計算完權重和,再加上這個值,才是最後的結果

OutputArray dst:輸出數組,與輸入數組具有相同大小和通道數

int dtype = -1: 輸出陣列的可選深度;當兩個輸入數組具有相同的深度時,使用dtype

       可以設置為-1,這將等效於src1.depth()

線性混合模式:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using
namespace cv; 6 7 int main(int argc, char** argv) { 8 9 /*載入原圖像*/ 10 Mat src1, src2, dst; 11 src1 = imread("D:/shenjianxin.png"); 12 src2 = imread("D:/xiaobai.png"); 13 if (!src1.data ) { 14 cout << "could not load image1" << endl; 15 return
false; 16 } 17 if (!src2.data) { 18 cout << "could not load image2" << endl; 19 return false; 20 } 21 imshow("shenjianxin", src1); 22 imshow("xiaobai", src2); 23 24 /*圖像融合*/ 25 double alpha = 0.45; 26 if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) { 27 addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst); 28 } 29 else { 30 cout << "could not blend photo" << endl; 31 return false; 32 } 33 34 /*顯示結果*/ 35 namedWindow("blend demo", CV_WINDOW_AUTOSIZE); 36 imshow("blend demo", dst); 37 38 waitKey(0); 39 return 0; 40 }

原始圖

技術分享圖片

技術分享圖片

效果圖

技術分享圖片

    

OpenCV基礎(三)---圖像混合