opencv 鼠标事件例子

//鼠标在窗口中画图形

#include <cv.h> //  OpenCV 的基本函数头文件  
#include <highgui.h> //OpenCV 的图像显示函数头文件  

//回调函数
void my_mouse_callback(int event, int x, int y, int flags, void* param);
//方形
CvRect box;
bool drawing_box = false;//标志是否划了

void draw_box( IplImage* image, CvRect rect )
{
    cvRectangle(
        image,
        cvPoint(box.x,box.y),
        cvPoint(box.x+box.width,box.y+box.height),
        cvScalar(0xff,0xff,0x00) 
        );
}

int main( int argc, char* argv[])  
{  
        box = cvRect(-1,-1,0,0);
        IplImage* image = cvCreateImage(
            cvSize(400,400),
            IPL_DEPTH_8U,
            3
            );
        cvZero( image );
        IplImage* temp = cvCloneImage( image );

        cvNamedWindow( "Box Example",0 );

        cvSetMouseCallback(
            "Box Example",
            my_mouse_callback,
            (void*) image
            );
        while(1)
        {
            cvCopyImage( image, temp );
            if( drawing_box ) draw_box( temp, box );
            cvShowImage( "Box Example", temp );
            
            if( cvWaitKey( 15 ) == 27 ) break;
        }

        cvReleaseImage( &image );
        cvReleaseImage( &temp );
        cvDestroyWindow( "Box Example" );
} 

void my_mouse_callback(int event, int x, int y, int flags, void* param)
{
    IplImage* image = (IplImage*) param;

    switch(event)
    {
    case CV_EVENT_MOUSEMOVE:
        {
            if( drawing_box )
            {
                box.width = x-box.x;
                box.height = y-box.y;
            }
        }break;
    case CV_EVENT_LBUTTONDOWN:
        {
            drawing_box = true;
            box = cvRect(x,y,0,0);
        }break;
    case CV_EVENT_LBUTTONUP:
        {
            drawing_box = false;
            if( box.width<0 )
            {
                box.x += box.width;
                box.width *= -1;
            }else if( box.width>image->width )
            {
                box.x = 0+image->width/4;
                box.width = image->width/2;
            }
            if( box.height<0 )
            {
                box.y += box.height;
                box.height *= -1;
            }else if( box.height>image->height )
            {
                box.y = 0+image->height/4;
                box.height = image->height/2;
            }
            draw_box(image,box);
        }break;
    }
}

 

posted on 2013-03-01 09:04  NewPanderKing  阅读(368)  评论(0)    收藏  举报

导航