linux 下调用opencv接口函数实现鼠标在窗口画方框操作

来源:互联网 发布:在github上下载源码 编辑:程序博客网 时间:2024/05/18 16:35
#include <opencv2/legacy/compat.hpp>
#include <opencv2/highgui/highgui.hpp>




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(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");

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);
}
break;
}
}
阅读全文
0 0
原创粉丝点击