現在地 >> メニュー >> サンプルコード::OpenCV >> RGBレイヤー分解


問題


画像をRGBレイヤーに分解し、Rレイヤーだけ閾値処理をおこなってから、
レイヤーを再集合させ、カラー画像を作成せよ。

画像

答え

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

int main(int argc, char *argv[])
{
IplImage* IN_Img = NULL;
IplImage* R_channelImg = NULL;
IplImage* G_channelImg = NULL;
IplImage* B_channelImg = NULL;
IplImage* OUT_Img = NULL;

IN_Img=cvLoadImage("test2.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(IN_Img==NULL){
printf("Can't Load File !\n");
exit(0);
}


R_channelImg = cvCreateImage(cvGetSize(IN_Img),IPL_DEPTH_8U,1);
G_channelImg = cvCreateImage(cvGetSize(IN_Img),IPL_DEPTH_8U,1);
B_channelImg = cvCreateImage(cvGetSize(IN_Img),IPL_DEPTH_8U,1);


/*RGB分解*/
cvCvtPixToPlane(IN_Img,B_channelImg,G_channelImg,R_channelImg,0);

OUT_Img = cvCloneImage(IN_Img);

cvReleaseImage(&IN_Img );


cvThreshold(R_channelImg, R_channelImg, 128, 255, CV_THRESH_BINARY);

/*再集合*/
cvCvtPlaneToPix(B_channelImg,G_channelImg,R_channelImg,0,OUT_Img);

cvNamedWindow("GREEN", CV_WINDOW_AUTOSIZE);
cvNamedWindow("RED_Threshold", CV_WINDOW_AUTOSIZE);
cvNamedWindow("BLUE", CV_WINDOW_AUTOSIZE);
cvNamedWindow("RGB", CV_WINDOW_AUTOSIZE);


cvShowImage("GREEN", G_channelImg );
cvShowImage("RED_Threshold", R_channelImg );
cvShowImage("BLUE", B_channelImg );
cvShowImage("RGB", OUT_Img );


cvWaitKey(0);


cvReleaseImage(&R_channelImg);
cvReleaseImage(&G_channelImg);
cvReleaseImage(&B_channelImg);

cvDestroyWindow("RGB");
cvDestroyWindow("BLUE");
cvDestroyWindow("RED_Threshold");
cvDestroyWindow("GREEN");


}

メモ


RGB分解部分は、
cvCvtPixToPlane(IN_Img,B_channelImg,G_channelImg,R_channelImg,0);
         ↓
cvSplit(IN_Img,B_channelImg,G_channelImg,R_channelImg,0);
でもOK。


再集合部分は、
cvCvtPlaneToPix(B_channelImg,G_channelImg,R_channelImg,0,OUT_Img);
         ↓
cvMerge(B_channelImg,G_channelImg,R_channelImg,0,OUT_Img);
でもOK。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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