-
OpenCV處理圖像混合主要是根據(jù)線性混合函數(shù)岩睁,通過在0到1范圍內(nèi)改變α的值涌穆,使兩幅圖像或者視頻產(chǎn)生在時間上的畫面疊化得效果概疆。實際上α和β的和不一定為1奖唯,只是為了防止圖像出現(xiàn)過飽和的現(xiàn)象县恕。
線性公式.png 在以上公式中东羹,f1(x)和f2(x)分別代表兩張圖片的矩陣,α和β表示兩張圖片的權(quán)重忠烛。這里要注意一點就是因為我們要對兩張圖片求和属提,所以它們必須是相同的尺寸和類型。
通過函數(shù)addWeighted可以方便地實現(xiàn)生成最終圖像g(x)的功能美尸,如下
addWeighted(pictureMatA,alpha,pictureMatB,beta,0.0,resultMat);
該函數(shù)進行了如下的計算冤议,result = alphapictureMatA + betapictureMatB + gama,在以上公式中火惊,gama為0.0求类,該參數(shù)主要起到了一個微調(diào)的作用。
code:
- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = [UIScreen mainScreen].bounds;
self.imgView.frame = rect;
UIImage *image1 = [UIImage imageNamed:@"dog.jpg"];
UIImageToMat(image1, PictureMatA);
UIImage *image2 = [UIImage imageNamed:@"dog2.png"];
UIImageToMat(image2, PictureMatB);
double t = (double)getTickCount();
blending(PictureMatA, PictureMatB, resultPictureMat);
t = ((double)getTickCount() - t)/getTickFrequency();
cout<< "--------------cost:" << t <<" seconds-----------------" <<endl;
self.imgView.image = MatToUIImage(resultPictureMat);
// Do any additional setup after loading the view, typically from a nib.
}
void blending (const Mat& pictureA ,const Mat& pictureB, Mat& resultPicture)
{
float alpha = 0.2f,beta;
beta = 0.8;
addWeighted(pictureA, alpha, pictureB, beta, 0.0, resultPicture);
}
dog+dog2.png