1 #include <cv.h>
2 #include <highgui.h>
3 #include <stdio.h>
4 /*鼠标画矩形*/
5 void my_mouse_callback(
6 int event,int x,int y,int flag,void* param
7 );
8
9 CvRect box;
10 bool drawing_box = false;
11
12 void draw_box(IplImage* img,CvRect rect)
13 {
14 cvRectangle(
15 img,
16 cvPoint(box.x,box.y),
17 cvPoint(box.x+box.width,box.y+box.height),
18 cvScalar(0xff,0x00,0x00)
19 );
20 }
21
22 int main()
23 {
24 box = cvRect(-1,-1,0,0);
25 IplImage* image = cvCreateImage(
26 cvSize(500,500),
27 IPL_DEPTH_8U,
28 3
29 );
30 cvZero(image);
31 IplImage* temp = cvCloneImage(image);
32
33 cvNamedWindow("Box Example");
34
35 cvSetMouseCallback(
36 "Box Example",
37 my_mouse_callback,
38 (void*)image
39 );
40
41 while(1)
42 {
43 cvCopyImage(image,temp);
44 if(drawing_box) draw_box(temp,box);
45 cvShowImage("Box Example",temp);
46
47 if(cvWaitKey(15)==27) break;
48 }
49
50 cvReleaseImage(&image);
51 cvReleaseImage(&temp);
52 cvDestroyAllWindows();
53
54
55 }
56
57 void my_mouse_callback(
58 int event,int x,int y,int flag,void* param
59 )
60 {
61 IplImage* image = (IplImage*)param;
62
63 switch (event)
64 {
65 case CV_EVENT_MOUSEMOVE:
66 {
67 if(drawing_box)
68 {
69 box.width = x-box.x;
70 box.height = y-box.y;
71
72 }
73
74 }
75 break;
76 case CV_EVENT_LBUTTONDOWN:
77 {
78 drawing_box = true;
79 box = cvRect(x,y,0,0);
80 }
81 break;
82 case CV_EVENT_LBUTTONUP:
83 {
84 drawing_box = false;
85 if(box.width<0)
86 {
87 box.x += box.width;
88 box.width*=-1;
89 }
90 if(box.height<0)
91 {
92 box.y+=box.height;
93 box.height*=-1;
94 }
95 draw_box(image,box);
96 }
97 break;
98 }
99 }