現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::アルファブレンド

問題


以下の2枚画像を読み込んで、アルファブレンドを行え。

その他条件:
 α値 = 0.5


画像
画像2


OpenCV::アルファ+キー入力

答え


#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace std;

char *file[]={"file5.jpg","file6.jpg"};
#define IMAGE_NUM 2


IplImage *CV_ALPHA_BREND(IplImage *imgA,IplImage *imgB, double alpha = 0.5);


int main( int argc, char **argv)
{

IplImage *imgA[IMAGE_NUM];
for(int i = 0; i < IMAGE_NUM;i++)
{
imgA[i]= cvLoadImage( file[i], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(imgA[i] ==NULL)
{
cout << file[i] <<" : Can't Load Image ." << endl;
std::exit(0);
}
}


IplImage *alpha = CV_ALPHA_BREND(imgA[0],imgA[1],0.5);


for(int i = 0; i < IMAGE_NUM;i++)
{
cvReleaseImage( &imgA[i] );
}


cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",alpha);


cvWaitKey(0); // 0秒待つ => ずっと入力待ち


cvReleaseImage( & alpha );

cvDestroyWindow("window");

return 0;
}


IplImage *CV_ALPHA_BREND(IplImage *imgA,IplImage *imgB,double alpha)
{

IplImage *temp=cvCloneImage(imgA);
for(int j = 0;j<imgA->height;j++)
{
for(int i = 0;i<imgA->widthStep;i+=3)
{

temp->imageData[j*temp->widthStep + i] = char(alpha * unsigned char (imgA->imageData[j*imgA->widthStep + i]) + (1.0-alpha) * unsigned char (imgB->imageData[j*imgB->widthStep + i]));
temp->imageData[j*temp->widthStep + i+1] = char(alpha * unsigned char (imgA->imageData[j*imgA->widthStep + i + 1]) + (1.0-alpha) * unsigned char (imgB->imageData[j*imgB->widthStep + i + 1]));
temp->imageData[j*temp->widthStep + i+2] = char(alpha * unsigned char (imgA->imageData[j*imgA->widthStep + i + 2]) + (1.0-alpha) * unsigned char (imgB->imageData[j*imgB->widthStep + i + 2]));
}
}

return (temp);
}

メモ


デフォルトα値=0.5とした

CV_ALPHA_BREND(画像1、画像2、1)だと「画像1」がそのまま出力される仕様。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます