鼠标截图画框

CvMouseCallback:鼠标事件

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

void my_mouse_callback(int  event0,int x,int y,int flags,void* param);
CvRect box;
bool drawing_box=false;

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


 int _tmain(int argc, _TCHAR* argv[])

{

     box=cvRect(-1,-1,0,0);

     IplImage* image=cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);

     cvZero(image);

     IplImage* temp=cvCloneImage(image);

     cvNamedWindow("Box Example");

     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 event0,int x,int y,int flags,void* param)
{
     IplImage* image=(IplImage*)param;
     switch(event0)
    {
        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;
            }
            if(box.height <0)
            {
                 box.y+=box.height ;
                 box.height *=-1;
            }
            draw_box(image,box);
  break;
 }
}

 包括头文件;

 

声明鼠标事件的回调函数;event0 代表鼠标事件;x,y代表发生鼠标事件时鼠标位置坐标;flags表示发生时的状态;param可用来传递额外的参数信息。

 

在图像上画矩形

 

BGR (线条为红色)


 

 

定义图像:200X200,8位,三通道

图像背景为0 (黑色)

 

定义窗口

声明回调函数,把整个图像作为参数传入

 

主循环

 

 

 

15ms内如果有Esc按键则退出

 

退出时销毁图像

 

 


 回调函数

 

 

鼠标移动时改变矩形的大小

 

左键点击定义矩形的起点

 

释放左键确定矩形的大小并画矩形

 

结果图像:

鼠标截图画框_第1张图片

你可能感兴趣的:(image,callback)