現在地 >> メニュー >> サンプルコード::OpenCV >> 2値化とトラックバー
関連OpenCV::基本編04

問題


以下の画像をグレイスケールとして読み込んで、2値化処理をせよ。
ただし、トラックバーをつけて、閾値を変更できるようにする。

答え

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

//----------- 各種外部変数 -------------------//
const std::string filename("file2.jpg");
IplImage *imgA;
IplImage *clone;


//---------- プロトタイプ宣言 ------------//
void TrackBarFunc(int val);


//--------- 各種データ構造 --------------//
//トラックバー
struct _TrackBarData
{
	char *Name; //名前
	int Pos; // スライダの位置
	int MaxValue; //上限値
};
_TrackBarData TBData={"TrackBar",127,255};



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

	imgA = cvLoadImage( filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE);//グレイスケールで読み込み
	if(imgA == NULL){
		std::cerr << filename.c_str() <<" : Can't Load Image\n";
		return -1;
	}

	clone = cvCloneImage(imgA); //クローンを作成

	cvThreshold(clone,clone,TBData.Pos,TBData.MaxValue,CV_THRESH_BINARY);

	cvNamedWindow("OpenCV",CV_WINDOW_AUTOSIZE);
	cvShowImage("OpenCV",clone);

	cvCreateTrackbar( TBData.Name, "OpenCV", &TBData.Pos, TBData.MaxValue , TrackBarFunc);

	cvWaitKey(0);

	cvReleaseImage(& imgA);
	cvReleaseImage(& clone);

	cvDestroyAllWindows();

	return 0;
}


//------------ ここから各種コールバック --------------//
void TrackBarFunc(int val)
{
	cvCopy(imgA,clone);
	cvThreshold(clone,clone,static_cast<double>(val),static_cast<double>(TBData.MaxValue),CV_THRESH_BINARY);
	cvShowImage("OpenCV",clone);
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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