現在地 >> メニュー >> サンプルコード::OpenCV >> ポスタリゼーション

問題


以下の画像をグレースケール画像で読み込んで、
8段の階段状のトーンカーブによる変換をせよ。

画像


答え


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

using namespace std;

void POSTERIZATION(IplImage *img);

int main( int argc, char **argv)
{
IplImage *imgA = cvLoadImage( "test3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(imgA ==NULL)
{
cout<<"Can't Load Image ." << endl;
exit(0);
}


POSTERIZATION(imgA);


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

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

cvReleaseImage( &imgA );

cvDestroyWindow("window");

return 0;
}


void POSTERIZATION(IplImage *img)
{


for(int i = 0; i<img->imageSize; i++)
{

if( unsigned(img->imageData[i]) <32)
{
img->imageData[i]=0;
}
else if( unsigned(img->imageData[i]) <64)
{
img->imageData[i]=32;
}else if(unsigned(img->imageData[i]) <96)
{
img->imageData[i]=64;
}
else if(unsigned(img->imageData[i]) <128)
{
img->imageData[i]=96;
}
else if(unsigned(img->imageData[i]) <char(160))
{

img->imageData[i]=char(128);//(signed)test;
}
else if(unsigned(img->imageData[i]) <char(192))
{

img->imageData[i]=char(160);
}else if(unsigned(img->imageData[i]) <char(224))
{

img->imageData[i]=char(192);
}else if(unsigned(img->imageData[i]) <char(255))
{
img->imageData[i]=char(224);
}
else
{
img->imageData[i]=char(255);
}//if文おわり


}//for文おわり


}

メモ


定数はconst intとみなされる場合があるので、キャストする。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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