現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::ラバーバンド

問題


ウィンドウを作成し、直線のラバーバンドを実現せよ。


答え


#include <cv.h>
#include <highgui.h>
#include <cstdio>
#include <iostream>
#include <cmath>

using namespace std;


void Mouse( int event, int x, int y, int flags ,void *param);

CvSize window={300,300};//ウィンドウサイズ
IplImage *imgA;
IplImage *tmp;
int main( int argc, char **argv)
{

imgA = cvCreateImage(window,IPL_DEPTH_8U,3);
cvSet (imgA, cvScalarAll (255), 0);
tmp = cvCloneImage(imgA);


cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);

cvSetMouseCallback("window", Mouse);


cvWaitKey(0); // 0秒待つ => ずっと入力待ち


cvReleaseImage( &imgA );
cvReleaseImage( &tmp );

cvDestroyWindow("window");

return 0;
}


/******* [ここから コールバック]********/
int Xstart,Ystart;
void Mouse( int event, int x, int y, int flags ,void *param = NULL) // コールバック関数
{
static bool MOUSE_FLAG=false;

switch(event)
{

case CV_EVENT_LBUTTONDOWN:
MOUSE_FLAG = true;
cvRectangle(imgA,cvPoint(x,y),cvPoint(x,y),cvScalar(255,0,0));
cvShowImage("window",imgA);
Xstart = x;
Ystart = y;
break;


case CV_EVENT_LBUTTONUP:
MOUSE_FLAG=false;
cvCopy(tmp,imgA);
break;


/**** 右ボタンでクリア ****/
case CV_EVENT_RBUTTONDOWN:
cvSet (imgA, cvScalarAll (255), 0);
cvShowImage("window",imgA);
break;
}

if(event == CV_EVENT_MOUSEMOVE && MOUSE_FLAG == true)
{

cvShowImage("window",imgA);
cvCopy(imgA,tmp);
cvLine(tmp,cvPoint(Xstart,Ystart),cvPoint(x,y),cvScalar(255,0,0));

cvShowImage("window",tmp);

}

}

メモ


線の描画部分を
cvRectangle(tmp,cvPoint(Xstart,Ystart),cvPoint(x,y),cvScalar(255,0,0));
とすれば、矩形のラバーバンド。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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