OpenCV基礎(三)---圖像混合
阿新 • • 發佈:2019-04-06
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 usingnamespace 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 returnfalse; 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基礎(三)---圖像混合