最終更新: mikk_ni3_92 2008年05月30日(金) 15:11:27履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> 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);
}
#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);
}