最終更新: mikk_ni3_92 2007年10月01日(月) 10:12:49履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::RGBA画像作成
#include <cstdio>
#include <cstdlib>
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
#define TEXT_N 2
const char *files[]={"test2.bmp","mask2.bmp"};
int main(int argc, char **argv)
{
IplImage *image1[TEXT_N];
IplImage *gray;
for(int i = 0;i<TEXT_N;i++)
{
image1[i]=cvLoadImage(files[i],CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(image1[i]==NULL)
{
printf("can't load image \n");
std::exit(0);
}
}
/*アルファデータ作成*/
gray = cvCreateImage(cvGetSize(image1[1]),IPL_DEPTH_8U,1);
cvCvtColor(image1[1], gray, CV_BGR2GRAY);
cvReleaseImage(&image1[1]);
/*RGBA画像作成(コピーを修正してゆく)*/
IplImage *rgba;
rgba = cvCloneImage(image1[0]);
rgba->nChannels = 4;
rgba->widthStep = rgba->widthStep *4 / 3;
rgba->imageSize = rgba->height * rgba->widthStep;
/*カラーデータ部*/
unsigned long size;
size = image1[0]->width*image1[0]->height*4;
rgba->imageData = new char[size];
unsigned long m=0;
unsigned long n=0;
for(unsigned long l = 0; l < size ;l+=4,m+=3,n++)
{
rgba->imageData[l]=(unsigned)image1[0]->imageData[m];
rgba->imageData[l+1]=(unsigned)image1[0]->imageData[m+1];
rgba->imageData[l+2]=(unsigned)image1[0]->imageData[m+2];
rgba->imageData[l+3]=(unsigned)gray->imageData[n];
}
cvReleaseImage(&image1[0]);
cvReleaseImage(&gray);
cvSaveImage("out.bmp",rgba);
cvReleaseImage(&rgba);
cout << "OK !"<< endl;
return 0;
}
#include <cstdio>
#include <cstdlib>
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
#define TEXT_N 2
const char *files[]={"test2.bmp","mask2.bmp"};
int main(int argc, char **argv)
{
IplImage *image1[TEXT_N];
IplImage *gray;
for(int i = 0;i<TEXT_N;i++)
{
image1[i]=cvLoadImage(files[i],CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(image1[i]==NULL)
{
printf("can't load image \n");
std::exit(0);
}
}
/*アルファデータ作成*/
gray = cvCreateImage(cvGetSize(image1[1]),IPL_DEPTH_8U,1);
cvCvtColor(image1[1], gray, CV_BGR2GRAY);
cvReleaseImage(&image1[1]);
/*RGBA画像作成(コピーを修正してゆく)*/
IplImage *rgba;
rgba = cvCloneImage(image1[0]);
rgba->nChannels = 4;
rgba->widthStep = rgba->widthStep *4 / 3;
rgba->imageSize = rgba->height * rgba->widthStep;
/*カラーデータ部*/
unsigned long size;
size = image1[0]->width*image1[0]->height*4;
rgba->imageData = new char[size];
unsigned long m=0;
unsigned long n=0;
for(unsigned long l = 0; l < size ;l+=4,m+=3,n++)
{
rgba->imageData[l]=(unsigned)image1[0]->imageData[m];
rgba->imageData[l+1]=(unsigned)image1[0]->imageData[m+1];
rgba->imageData[l+2]=(unsigned)image1[0]->imageData[m+2];
rgba->imageData[l+3]=(unsigned)gray->imageData[n];
}
cvReleaseImage(&image1[0]);
cvReleaseImage(&gray);
cvSaveImage("out.bmp",rgba);
cvReleaseImage(&rgba);
cout << "OK !"<< endl;
return 0;
}