使用OpenCV添加(混合)兩個圖像

2018-08-29 14:12 更新

目標(biāo)

在本教程中,您將學(xué)習(xí):

  • 什么是線性混合,為什么它是有用的?
  • 如何使用cv :: addWeighted添加兩個圖像

理論

注意
下面的解釋屬于Richard Szeliski 的“ 計算機視覺:算法與應(yīng)用 ”一書

從我們以前的教程中,我們已經(jīng)知道了一些像素運算符。一個有趣的二元(雙輸入)運算符是線性混合運算符:

QQ圖片20170829140712

通過從0 \ rightarrow 1改變,此運算符可用于執(zhí)行兩個圖像或視頻之間的時間交叉解,如幻燈片放映和電影制作(cool,eh?)所示。α0→1

源代碼

這里下載源代碼。


#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( void )
{
   double alpha = 0.5; double beta; double input;
   Mat src1, src2, dst;
   cout << " Simple Linear Blender " << endl;
   cout << "-----------------------" << endl;
   cout << "* Enter alpha [0-1]: ";
   cin >> input;
   // We use the alpha provided by the user if it is between 0 and 1
   if( input >= 0 && input <= 1 )
     { alpha = input; }
   src1 = imread( "../data/LinuxLogo.jpg" );
   src2 = imread( "../data/WindowsLogo.jpg" );
   if( src1.empty() ) { cout << "Error loading src1" << endl; return -1; }
   if( src2.empty() ) { cout << "Error loading src2" << endl; return -1; }
   beta = ( 1.0 - alpha );
   addWeighted( src1, alpha, src2, beta, 0.0, dst);
   imshow( "Linear Blend", dst );
   waitKey(0);
   return 0;
}

說明

  • 由于我們要執(zhí)行:

QQ圖片20170829140934

我們需要兩個源圖像(和)。所以,我們以通常的方式加載它們:f0(x)f1(x)

   src1 = imread(“../data/LinuxLogo.jpg”);
   src2 = imread(“../data/WindowsLogo.jpg”);

警告

由于我們添加 src1和src2,它們必須具有相同的大?。▽捄透撸┖皖愋?。

  • 現(xiàn)在我們需要生成g(x)圖像。為此,函數(shù)cv :: addWeighted非常方便:

   β=(1.0-α);
   addWeighted(src1,alpha,src2,beta,0.0,dst);

因為cv :: addWeighted產(chǎn)生:

QQ圖片20170829141031

在這種情況下,gamma是上面代碼中的參數(shù)。0.0

  • 創(chuàng)建窗口,顯示圖像并等待用戶結(jié)束程序。

   imshow( "Linear Blend", dst );
   waitKey(0);

結(jié)果

Adding_Images_Tutorial_Result_Big


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號