• atwiki
  • ProMemo
  • [動画の2値化(Movie Binalize)-C]の変更点

「動画の2値化(Movie Binalize)-C」の編集履歴(バックアップ)一覧はこちら

動画の2値化(Movie Binalize)-C」(2009/09/24 (木) 23:37:38) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*&this_page() |&tags()|解説|最終更新日 &date()|&link_pdf(text=PDFで表示)|[[ダウンロード>http://www20.atwiki.jp/yosilove?cmd=upload&act=open&pageid=18&file=capbin.zip]]| OpenCVを用いてキャプチャした動画に対して2値化を行う。 2値化の閾値はトラックバーで操作可能。 #contents *captureBinary.c //http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/動画像処理プログラム2.html #include <cv.h> #include <highgui.h> #include <stdio.h> #define TRACKBAR_MAX_VALUE 255 // トラックバーの最大値 #define THRESHOLD_MAX_VALUE 255 // 2値化の際に使用する最大値 static int flip =1; void binarization(IplImage *src,IplImage *binary, int threshhold); void on_change( int pos ); int main(){ int levels = 128; // トラックバーの値(2値化の際の閾値)のデフォルト //cvCaptureFromCAMでキャプチャ用のCvCaptureへのポインタを取得 //引数はカメラ番号 CvCapture *capture = cvCaptureFromCAM(CV_CAP_ANY); IplImage *image,*imageBinary; int keyInput; if(!capture){ fprintf(stderr,"Capture failed\n"); return 1; } cvNamedWindow("main window",CV_WINDOW_AUTOSIZE); cvNamedWindow("binary window",CV_WINDOW_AUTOSIZE); //閾値を決めるトラックバーを設置 cvCreateTrackbar("Threathhold", "binary window", &levels,TRACKBAR_MAX_VALUE, on_change ); //cvcamでのコールバックの代わりに無限ループを回す for(;;){ //フレーム画像を取得 image=cvQueryFrame(capture); if(!image) break; if(!imageBinary) imageBinary = cvCreateImage (cvGetSize (image), IPL_DEPTH_8U, 1); if(flip==1) cvFlip(image,NULL,1); //反転 cvShowImage("main window",image); //2値値する。 binarization(image,imageBinary, levels); cvShowImage("binary window",imageBinary); //10msのウェイトをかけてキー入力を監視 keyInput=cvWaitKey(10); //ESCキーでループを終了 if((keyInput&255)==27) break; } //後片付け cvReleaseCapture(&capture); cvDestroyWindow("main window"); cvDestroyWindow("binary window"); return 0; } /**2値画像に変換し,表示する * srcを threshholdで2値化してbinaryに返す。 * * ただし、binaryは1チャンネルの画像 */ void binarization(IplImage *src,IplImage *binary, int threshhold){ // BGRからグレースケールに変換する cvCvtColor( src, binary, CV_BGR2GRAY ); // グレースケールから2値に変換する cvThreshold( binary, binary, threshhold, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY ); } // // トラックバーの値が変わった時に呼ばれる関数 // // 引数: // pos : トラックバーの値 // void on_change( int pos ){ printf("Changed !! pos=%d\n",pos); } *Makefile **Mac CXX = g++ -Wall -O2 CC = gcc -Wall -O2 CXXFLAGS = `pkg-config --cflags opencv` LDFLAGS = `pkg-config --libs opencv` FRAMEWOKS = -framework OpenGL -framework GLUT -framework Foundation .cpp: $(CXX) $@.cpp $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ .c: $(CC) $@.c $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ *実行方法 コンパイルして make captureBinary 実行 ./captureBinary *実行結果 なにか画質が悪いが、雰囲気はつかめると思う。 白黒画像の上にはトラックバーがあり、トラックバーを動かすとTerminalにトラックバーの値が出力される。 トラックバーの値を閾値にして2値化を行う。 #video(http://www.youtube.com/watch?v=znoQnLVBsuI) *テスト環境 |MacOSX 10.5.8| |OpenCV| ----
*&this_page() |&tags()|解説|最終更新日 &date()|&link_pdf(text=PDFで表示)|[[ダウンロード>http://www20.atwiki.jp/yosilove?cmd=upload&act=open&pageid=18&file=capbin.zip]]|View &counter(total)| OpenCVを用いてキャプチャした動画に対して2値化を行う。 2値化の閾値はトラックバーで操作可能。 #contents *captureBinary.c //http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/動画像処理プログラム2.html #include <cv.h> #include <highgui.h> #include <stdio.h> #define TRACKBAR_MAX_VALUE 255 // トラックバーの最大値 #define THRESHOLD_MAX_VALUE 255 // 2値化の際に使用する最大値 static int flip =1; void binarization(IplImage *src,IplImage *binary, int threshhold); void on_change( int pos ); int main(){ int levels = 128; // トラックバーの値(2値化の際の閾値)のデフォルト //cvCaptureFromCAMでキャプチャ用のCvCaptureへのポインタを取得 //引数はカメラ番号 CvCapture *capture = cvCaptureFromCAM(CV_CAP_ANY); IplImage *image,*imageBinary; int keyInput; if(!capture){ fprintf(stderr,"Capture failed\n"); return 1; } cvNamedWindow("main window",CV_WINDOW_AUTOSIZE); cvNamedWindow("binary window",CV_WINDOW_AUTOSIZE); //閾値を決めるトラックバーを設置 cvCreateTrackbar("Threathhold", "binary window", &levels,TRACKBAR_MAX_VALUE, on_change ); //cvcamでのコールバックの代わりに無限ループを回す for(;;){ //フレーム画像を取得 image=cvQueryFrame(capture); if(!image) break; if(!imageBinary) imageBinary = cvCreateImage (cvGetSize (image), IPL_DEPTH_8U, 1); if(flip==1) cvFlip(image,NULL,1); //反転 cvShowImage("main window",image); //2値値する。 binarization(image,imageBinary, levels); cvShowImage("binary window",imageBinary); //10msのウェイトをかけてキー入力を監視 keyInput=cvWaitKey(10); //ESCキーでループを終了 if((keyInput&255)==27) break; } //後片付け cvReleaseCapture(&capture); cvDestroyWindow("main window"); cvDestroyWindow("binary window"); return 0; } /**2値画像に変換し,表示する * srcを threshholdで2値化してbinaryに返す。 * * ただし、binaryは1チャンネルの画像 */ void binarization(IplImage *src,IplImage *binary, int threshhold){ // BGRからグレースケールに変換する cvCvtColor( src, binary, CV_BGR2GRAY ); // グレースケールから2値に変換する cvThreshold( binary, binary, threshhold, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY ); } // // トラックバーの値が変わった時に呼ばれる関数 // // 引数: // pos : トラックバーの値 // void on_change( int pos ){ printf("Changed !! pos=%d\n",pos); } *Makefile **Mac CXX = g++ -Wall -O2 CC = gcc -Wall -O2 CXXFLAGS = `pkg-config --cflags opencv` LDFLAGS = `pkg-config --libs opencv` FRAMEWOKS = -framework OpenGL -framework GLUT -framework Foundation .cpp: $(CXX) $@.cpp $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ .c: $(CC) $@.c $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ *実行方法 コンパイルして make captureBinary 実行 ./captureBinary *実行結果 なにか画質が悪いが、雰囲気はつかめると思う。 白黒画像の上にはトラックバーがあり、トラックバーを動かすとTerminalにトラックバーの値が出力される。 トラックバーの値を閾値にして2値化を行う。 #video(http://www.youtube.com/watch?v=znoQnLVBsuI) *テスト環境 |MacOSX 10.5.8| |OpenCV| ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー