如何使用OPENCV實現兩張圖片的混合(PS中的圖層不透明度)
阿新 • • 發佈:2018-12-29
Goal
- 什麼是線性混合,用於何處?
- 怎麼使用addWeighted()?
Theory
前面已經學到了一點基本的畫素級操作,一個比較有趣的二元操作是線性混合操作:
α在0-1之間變化,這種操作用於兩幅影象或者錄影交叉融合。
示例程式碼
#include <cv.h> #include <highgui.h> #include <iostream> using namespace cv; int main( int argc, char** argv ) { 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; //alpha必須在0-1之間 if( input >= 0.0 && input <= 1.0 ) { alpha = input; } src1 = imread("../../images/LinuxLogo.jpg"); //**兩張圖片的大小型別需要一致** src2 = imread("../../images/WindowsLogo.jpg"); 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); imshow( "Linear Blend", dst ); waitKey(0); return 0; }
addWeighted( src1, alpha, src2, beta, 0.0, dst);
addWeighted執行:
在上面例子裡γ=0 。