Just My Life & My Work

簡單來玩影像混合 (Image Blending),使用兩張影像,依照權重混合出新的影像。

/**
	Theme: Image Blending
	compiler: Visual Studio 2010 with OpenCV 2.4 beta
	Date: 101/05/24
	Author: HappyMan
	Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv ){
   double alpha = 0.5; double beta; double input;

   Mat src1, src2, dst;

   /// Ask the user enter alpha
   cout<<" Simple Linear Blender "<<std::endl;
   cout<<"-----------------------"<<std::endl;
   cout<<"* Enter alpha [0-1]: ";
   cin>>input;

   // We use the alpha provided by the user iff it is between 0 and 1
   if( alpha >= 0 && alpha <= 1 )
     { alpha = input; }

   /// Read image ( same size, same type )
   src1 = imread("HappyMan's Girl1.jpg");
   src2 = imread("HappyMan's Girl2.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 );
   imwrite( "girl_blending.jpg", dst );

   waitKey(0);
   return 0;
}

這樣簡單的線性混合,可以依據兩個式子來描述:

  • dst = alpha*src1 + beta*src2
  • alpha + beta = 1

需要注意的是兩張影像長寬要一樣,不然執行後程式會當掉。

關鍵函式cvAddWeighted的使用方式:

void cvAddWeighted( const CvArr* src1, double alpha,
                     const CvArr* src2, double beta,
                     double gamma, CvArr* dst );
  • src1:第一個影像
  • alpha:第一個影像的權值
  • src2:第二個影像
  • beta:第二個影像的權值
  • gamma:添加的常數項。
  • dst:輸出的影像

多了gamma這個常數項,可以式子可以表示:

  • dst(I) = src1(I) * alpha + src2(I) * beta + gamma

需注意所有的影像必須有相同的類型相同的大小(或ROI大小)

依然請我的MV女孩來示範:P(點圖可放大)

左圖為HappyMan’s Girl2,右圖為HappyMan’s Girl1。

程式執行時可輸入[0, 1],我分別輸入0.3、0.5、0.8。

程式碼gamma參數分別設定為100和-100。

雖然執行程式時規定輸入[0, 1],但我這次分別輸入2和-2,出現無法預期的效果,這也可以說是一種藝術吧:P

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: