您的位置:首页 > 运维架构

opencv用鼠标画矩形

2014-06-16 20:02 183 查看
  代码来自《learning opencv》

   #include<cv.h>
#include<highgui.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 rect)
{
cvRectangle(
img,
cvPoint(box.x,box.y),
cvPoint(box.x+box.width,box.y+box.height),
cvScalar(0xff,0x00,0x00)
);
}
int main()
{
box=cvRect(-1,-1,0,0);
IplImage*image=cvCreateImage(
cvSize(500,500),
IPL_DEPTH_8U,
3
);
cvZero(image);
IplImage *temp=cvCloneImage(image);
cvNamedWindow("box1");
cvSetMouseCallback("box1",my_mouse_callback,(void*)image);
while(1)
{

cvCopyImage(image,temp);
if(drawing_box)
draw_box(temp,box);
cvShowImage("box1",temp);

if(cvWaitKey(18)==27)
break;
}
cvReleaseImage(&image);
cvReleaseImage(&temp);
cvDestroyWindow("box1");
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);
}
break;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: