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

#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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零一2035

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值