最終更新: mikk_ni3_92 2008年08月26日(火) 13:11:01履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCVとマウス入力 >> クリック地点と線描画
関連 : OpenCV::基本編03
関連 : OpenCV::基本編03
#include <iostream> #include <cv.h> #include <highgui.h> //----- 各種外部変数 ------// char *filename ="test2.jpg"; //直線のデータ構造 struct LineObj { int count; CvPoint start; //開始点 CvPoint end; //終点 }; LineObj LineData={0,{0,0},{0,0}}; //----- プロトタイプ宣言 -----// void Mouse( int event, int x, int y, int flags ,void *image); //-------- メイン関数 --------------// int main( int argc, char **argv) { IplImage *imgA = cvLoadImage( filename, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if(imgA ==NULL) { std::cout<<filename <<" : Can't load Image\n"; return -1; } cvNamedWindow(filename,CV_WINDOW_AUTOSIZE); cvShowImage(filename,imgA); cvSetMouseCallback(filename, Mouse,imgA); //コールバック関数の登録(第3引数あり) cvWaitKey(0); cvReleaseImage( &imgA ); cvDestroyWindow(filename); return 0; } /***********[ここから コールバック]***********/ void Mouse( int event, int x, int y, int flags ,void *image) { switch(event) { case CV_EVENT_LBUTTONDOWN: if(LineData.count == 0) { LineData.start.x = x; LineData.start.y = y; ++LineData.count; }else if(LineData.count == 1){ LineData.end.x = x; LineData.end.y = y; cvLine(static_cast<IplImage*>(image),LineData.start,LineData.end,CV_RGB( 0, 0, 255),2,CV_AA ,0); LineData.count = 0; } cvShowImage(filename,image); break; default: break; } }