-
先上效果圖
上面兩張是原圖,下面是合成后的效果
-
實現原理
通過對圖像像素操作 :
線性混合操作
算法公式
在范圍 0-->1 內改變
alpha
,這個操作可以用來對兩幅圖像或兩段視頻產生時間上的畫面疊化 (cross-dissolve)效果
-
主要代碼(合成不同大小的圖片)
記得添加 :using namespace cv;
這里使用
addWeighted
來進行兩幅圖像求和
- 首先先來了解
addWeighted
的參數
addWeighted(InputArray src1, // 圖像一 src1
double alpha, // 圖像一 alpha 值
InputArray src2, // 圖像二 src2
double beta, // 圖像二 beta 值
double gamma, // gamma 值
OutputArray dst, // 合成后的 圖像 dst
int dtype = -1) // 我代碼中省略了
實際上addWeighted
進行了如下計算:
`addWeighted`算法(這里的`alpha`、`beta`、`gamma`都用英文表示)- xCode中合成圖像代碼如下
// 根據上述對 addWeighted 函數的描述 我們先聲明如下參數
double alpha, beta;
Mat src1, src2, dst;此處合成圖片,兩張圖片的像素必須是一樣大小的
// 將本地圖片轉換成 Mat 圖像形式
UIImage *image1 = [UIImage imageNamed:@"6.jpg"];
UIImage *image2 = [UIImage imageNamed:@"8.jpg"];
UIImageToMat(image1, src1);
UIImageToMat(image2, src2);
// 調用 addWeighted 對兩個圖像進行合成
alpha = 0.5;
beta = 1 - alpha;
addWeighted(src1, alpha, src2, beta, 0.0, dst);
// 將 addWeighted 處理結果 dst 轉換成 UIImage 對象
_imgView2.image = MatToUIImage(dst);