注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Faye Euler's blog

技術交流歡迎留言

 
 
 

日志

 
 

OpenCV中的鼠标事件响应  

2011-10-22 16:01:48|  分类: OpenCV |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  1. #include<cv.h>
  2. #include<highgui.h>
  3. #include<iostream>
  4. using namespace std;
  5. // callback function
  6. void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param);
  7. struct drawbox
  8. {
  9. CvPoint point1;
  10. CvPoint point2;
  11. IplImage* image;
  12. IplImage* temp;
  13. bool isDraw;
  14. };
  15. int main(int argc,char* argv[])
  16. {
  17. // declare and initialize a struct drawbox variable
  18. drawbox box;
  19. box.point1 = cvPoint(0,0);
  20. box.point2 = cvPoint(0,0);
  21. box.image = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
  22. cvZero(box.image);
  23. box.temp = cvCloneImage(box.image);
  24. box.isDraw = false;
  25. // register a mouse callback function
  26. cvNamedWindow("exam",CV_WINDOW_AUTOSIZE);
  27. cvSetMouseCallback("exam",cvMouseCallback,&box);
  28. while(1)
  29. {
  30. cvCopy(box.image,box.temp);
  31. if(box.isDraw)
  32. {
  33. cvRectangle(box.temp,box.point1,box.point2,CV_RGB(255,255,255));
  34. }
  35. cvShowImage("exam",box.temp);
  36. if(cvWaitKey(20) == 27) break;
  37. }
  38. cvReleaseImage(&box.image);
  39. cvReleaseImage(&box.temp);
  40. cvDestroyWindow("exam");
  41. return 0;
  42. }
  43. void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param)
  44. {
  45. drawbox* box = (drawbox*)param;
  46. switch(mouseEvent)
  47. {
  48. case CV_EVENT_LBUTTONDOWN:
  49. box->point1 = cvPoint(x,y);
  50. box->point2 = cvPoint(x,y);
  51. box->isDraw = true;
  52. break;
  53. case CV_EVENT_MOUSEMOVE:
  54. box->point2 = cvPoint(x,y);
  55. break;
  56. case CV_EVENT_LBUTTONUP:
  57. box->point2 = cvPoint(x,y);
  58. cvRectangle(box->image,box->point1,box->point2,CV_RGB(0,255,0));
  59. box->isDraw = false;
  60. break;
  61. }
  62. return;
  63. }


程序定义了一个drawbox结构,结构中包含矩形的两个对角点,两个图像指针(程序可以指定在哪个图像上画矩形)和一个控制是否画图的bool类型变量。在回调函数中,程序监听了三种类型的鼠标事件:左键按下、鼠标移动和左键抬起。这三种类型的鼠标事件定义了一个完整的鼠标画图过程。左键按下时开始画图,拖动显示所画的图形,左键抬起表示画图结束。在结束之前,为了实时显示所画的图形,将所画的图放在box结构中的temp变量中,待画图结束时在box结构的image中存放这一次画图的最终结果。

  评论这张
 
阅读(1896)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017