OpenCV for iOS 學習筆記(五)—— 使用OpenCV合成兩張圖片



  • 先上效果圖
上面兩張是原圖,下面是合成后的效果
  • 實現原理

通過對圖像像素操作 : 線性混合操作

算法公式

在范圍 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);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容