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


問題


OpenCV::アルファブレンドのプログラムを利用して、
キー入力により、混ざり具合が変更できるようにせよ。


画像
画像2


OpenCV::アルファブレンド2

答え


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

using namespace std;

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

/**** 各種プロトタイプ宣言 ****/
inline void CV_MAIN_LOOP();
void CHECK_KEY();
void CV_ALPHA_BREND2(IplImage *imgA,IplImage *imgB,IplImage *output,double alpha = 0.5);



/************ メイン関数 ****************/
int main( int argc, char **argv)
{

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
CV_MAIN_LOOP();

return 0;
}



/******** OpenCVのメインループ *********/
double a=0;
inline void CV_MAIN_LOOP()
{

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 = cvCreateImage(cvGetSize(imgA[0]),IPL_DEPTH_8U,3);

cvShowImage("window",imgA[1]);


while(1)
{
CHECK_KEY();
CV_ALPHA_BREND2(imgA[0],imgA[1],alpha,a);
cvShowImage("window",alpha);
}



}


void CHECK_KEY()
{
static char key;
key = (char)cvWaitKey(0);

switch(key)
{
case '\033':
std::exit(1);
break;

case '1':
a += 0.1;
if(a >1) a = 1;
break;

case '2':
a -= 0.1;
if(a<0)a = 0;
break;

}
}



void CV_ALPHA_BREND2(IplImage *imgA,IplImage *imgB,IplImage *output,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]));
}
}
cvCopy(temp,output);

cvReleaseImage(&temp);

}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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