用户通过鼠标来画方形:
#include "highgui.h"
#include "cv.h"
void my_mouse_callback(int event,int x,int y,int flags,void* param);
CvRect box;
bool drawing_box=false;
void draw_box(IplImage* img,CvRect box)
{
cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),CV_RGB(255,0,0));
}
int main()
{
box=cvRect(-1,-1,0,0);
IplImage* image=cvCreateImage(cvSize(200,200),8,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");
return 0;
}
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;
}
if (box.height<0)
{
box.y+=box.height;
box.height*=-1;
}
draw_box(image,box);//左键谈起时,用于将已画好的图形显示在image上
break;
}
printf("( %d, %d) ",x,y);
printf("The Event is : %d ",event);
printf("The flags is : %d ",flags);
printf("The param is : %d\n",param);
}