OpenCV_用鼠标在窗口画方形

 

ContractedBlock.gif ExpandedBlockStart.gif View Code
 1 void my_mouse_callback(int event,int x,int y,int flags,void* param);
2
3 CvRect box;
4
5 bool drawing_box=false;
6
7 // a little subroutine to draw a box on to an image
8 void draw_box(IplImage* img,CvRect rect)
9 {
10 cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0xff,0x00));
11 }
12
13
14 int main(int argc,char** argv)
15 {
16 box=cvRect(-1,-1,0,0);
17
18 IplImage* image =cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);
19
20 cvZero(image);
21
22 IplImage* temp =cvCloneImage(image);
23
24 cvNamedWindow("Box example");
25 cvNamedWindow("image");
26 cvSetMouseCallback("Box example",my_mouse_callback,(void*) image);
27
28 while(1){
29 cvCopyImage(image,temp);
30 /* if(drawing_box) draw_box(image,box);
31 cvShowImage("image",image);*/
32 if(drawing_box) draw_box(temp,box);
33 cvShowImage("Box example",temp);
34
35 if(cvWaitKey(15)==27) break;
36 }
37
38 cvReleaseImage(&image);
39 cvReleaseImage(&temp);
40 cvDestroyWindow("Box example");
41 cvDestroyWindow("image");
42
43 return 0;
44
45
46 }
47 //event 指定鼠标事件类型
48 //int x y 为事件发生时鼠标位置的x,y坐标值。
49 //第四个参数flags 制定了事件在事件发生时的不同状态
50 void my_mouse_callback(int event,int x,int y,int flags,void* param)
51 {
52 IplImage* image= (IplImage*) param;
53 switch(event)
54 {
55 case CV_EVENT_MOUSEMOVE:
56 {
57 if(drawing_box)
58 {
59 box.width=x-box.x;
60 box.height=y-box.y;
61 }
62 }
63 break;
64 case CV_EVENT_LBUTTONDOWN:
65 {
66 drawing_box=true;
67 box=cvRect(x,y,0,0);
68 }
69 break;
70 case CV_EVENT_LBUTTONUP:
71 {
72 drawing_box=false;
73 if(box.width<0)
74 {
75 box.x=box.x+box.width;
76 box.width*=-1;
77
78 }
79 if(box.height<0)
80 {
81 box.y+=box.height;
82 box.height*=-1;
83 }
84 draw_box(image,box);
85 }
86 break;
87 }
88 }

r_rect.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值