#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
/* コードが読みやすいようにマウスイベント関係の定数を一覧しておく
#define CV_EVENT_MOUSEMOVE 0 移動
#define CV_EVENT_LBUTTONDOWN 1 左クリック下げ時
#define CV_EVENT_RBUTTONDOWN 2
#define CV_EVENT_MBUTTONDOWN 3
#define CV_EVENT_LBUTTONUP 4 左クリック上げ時
#define CV_EVENT_RBUTTONUP 5
#define CV_EVENT_MBUTTONUP 6
#define CV_EVENT_LBUTTONDBLCLK 7 左ダブルクリック時
#define CV_EVENT_RBUTTONDBLCLK 8
#define CV_EVENT_MBUTTONDBLCLK 9 中ボタンダブルクリック時
#define CV_EVENT_FLAG_LBUTTON 1
#define CV_EVENT_FLAG_RBUTTON 2
#define CV_EVENT_FLAG_MBUTTON 4
#define CV_EVENT_FLAG_CTRLKEY 8 Ctrlキー
#define CV_EVENT_FLAG_SHIFTKEY 16 Shiftキー
#define CV_EVENT_FLAG_ALTKEY 32 ALTキー
*/
IplImage *dsp_img, *src_img = 0;
/* マウスイベント用コールバック関数 この関数のフォーマットはcvSetMouseCallbackで決まっている */
void
on_mouse (int event, int x, int y, int flags, void *param)//マウスイベント毎に何度も再入してくる
{
CvPoint pt = cvPoint (x, y);
static CvPoint start_pt = { -1, -1 };//static この変数はこの関数を抜けてからも有効にしておく
if (event == CV_EVENT_LBUTTONDOWN)
{
start_pt = cvPoint (x, y);
}
else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
{
dsp_img = cvCloneImage (src_img); //前の描画がクリアー これをコメントアウトすると面白い描画になる。
if (start_pt.x < 0)
{
start_pt = pt;
}
// color thick
cvLine (dsp_img, start_pt, pt, CV_RGB(255,255,255), 1, 0, 0);
//cvLine (dsp_img, start_pt, pt, CV_RGB(255,255,255), 1, CV_AA, 0);//滑らか
cvShowImage ("image", dsp_img); //その都度線を引いて表示する
}
else if (event == CV_EVENT_LBUTTONUP)
{
src_img = cvCloneImage (dsp_img); //書き込んだものを固定
printf("(%d,%d)-(%d,%d)",start_pt.x,start_pt.y,pt.x,pt.y);
double x=start_pt.x-pt.x;
double y=start_pt.y-pt.y;
printf(" distance:%f\n",sqrt(x*x+y*y));
}
}
int
main (int argc, char **argv)
{
CvSize window_size = { 300, 300 };
src_img = cvCreateImage (window_size, IPL_DEPTH_8U, 3);
dsp_img = cvCloneImage (src_img);
cvNamedWindow ("image", CV_WINDOW_AUTOSIZE);
cvShowImage ("image", src_img);
cvSetMouseCallback ("image", on_mouse, 0);//イベントを受けるウィンドウタイトル名を指定し、コールバック関数名も指定
cvWaitKey (0);
cvReleaseImage (&src_img);
cvReleaseImage (&dsp_img);
}
最終更新:2010年01月17日 09:33