OpenCV学习笔记-用鼠标在窗口中画矩形

程序如下:

// drawBox.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #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) /*red*/ ); } int _tmain(int argc, char* 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 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; } }
运行结果如图:


参考文献:

学习OpenCV(中文版)于仕祺 刘瑞祯 译 清华大学出版社 pp:114-117.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值