最終更新: mikk_ni3_92 2008年09月10日(水) 11:26:23履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> 特定範囲の2値化 >> 特定範囲の2値化(2)
関連:特定範囲の2値化
関連:特定範囲の2値化
#include <iostream> #include <string> #include <cv.h> #include <highgui.h> //--------- 各種外部変数 -----------// const std::string filename = "file2.jpg"; enum{UPPER,LOWER}; IplImage *imgA; IplImage *clone; //---------- プロトタイプ宣言 ------------// void TrackBarFuncUpper(int val); void TrackBarFuncLower(int val); //------------ トラックバーのデータ構造 -----------------// struct _TrackBarData { char *Name; //名前 int Pos; // スライダの位置 int MaxValue; //上限値 }; _TrackBarData TBData[2]={{"Upper",255,255},{"Lower",0,255}}; //----------- ここからメイン関数 -------------// int main(int argc, char **argv) { imgA = cvLoadImage( filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE); if(imgA == NULL){ return EXIT_FAILURE; } clone = cvCloneImage(imgA); //クローンを作成 cvNamedWindow(filename.c_str(),CV_WINDOW_AUTOSIZE); cvInRangeS( clone, cvScalar(TBData[LOWER].Pos),cvScalar(TBData[UPPER].Pos+1), clone ); cvShowImage(filename.c_str(),clone); cvCreateTrackbar( TBData[UPPER].Name, filename.c_str(), &TBData[UPPER].Pos, TBData[UPPER].MaxValue , TrackBarFuncUpper); cvCreateTrackbar( TBData[LOWER].Name, filename.c_str(), &TBData[LOWER].Pos, TBData[LOWER].MaxValue , TrackBarFuncLower); cvWaitKey(0); // 0秒待つ => ずっと入力待ち cvReleaseImage( &imgA ); //メモリ解放 cvReleaseImage( &clone ); //メモリ解放 cvDestroyAllWindows(); //ウィンドウを破棄 return EXIT_SUCCESS; } void TrackBarFuncUpper(int val) { cvCopy(imgA,clone); TBData[UPPER].Pos = val; cvInRangeS( clone, cvScalar(TBData[LOWER].Pos),cvScalar(TBData[UPPER].Pos+1), clone ); cvShowImage(filename.c_str(),clone); } void TrackBarFuncLower(int val) { cvCopy(imgA,clone); TBData[LOWER].Pos = val; cvInRangeS( clone, cvScalar(TBData[LOWER].Pos),cvScalar(TBData[UPPER].Pos+1), clone ); cvShowImage(filename.c_str(),clone); }