1 #include "MouseSelect.h"
2
3 MouseSelectParams *g_mousep;4 MouseSelect::MouseSelect() {}5
6 MouseSelect::~MouseSelect() {}7
8 void MouseSelect::select_rect(Mat &frame)9 {10 obj_selected = 0;11 while(0 ==obj_selected)12 {13 obj_selected =get_rects(frame);14 if (obj_selected == 0)15 {16 cout<
21 void MouseSelect::select_point(Mat &frame)22 {23 obj_selected = 0;24 while(0 ==obj_selected)25 {26 obj_selected =get_points(frame);27 if (obj_selected == 0)28 {29 cout<
34 int MouseSelect::get_rects(Mat &frame)35 {36 char *win_name = "Init Frame";37 MouseSelectParams params;38 params.win_name =win_name;39 params.image = &frame;40 params.n = 0;41 params.mode = 2;42 namedWindow(win_name,WINDOW_AUTOSIZE);43 imshow(win_name,frame);44
45 g_mousep = ¶ms;46 setMouseCallback(win_name,on_mouse,0);47 waitKey(0);48 destroyWindow(win_name);49
50 intx1,x2,y1,y2,w,h;51 Rect rt;52 Point pt1,pt2;53 cout<
75 int MouseSelect::get_points(Mat &frame)76 {77 char *win_name = "Init Frame";78 MouseSelectParams params;79 params.win_name =win_name;80 params.image = &frame;81 params.n = 0;82 params.mode = 1;83
84 namedWindow(win_name,1);85 imshow(win_name,frame);86
87 g_mousep = ¶ms;88 setMouseCallback(win_name,on_mouse,0);89 waitKey(0);90
91 destroyWindow(win_name);92
93 cout<
101 void on_mouse(int event,int x,int y,int flags,void *param)102 {103 intn;104 static bool pressed = false;105 staticPoint cur_pt;106 staticPoint prev_pt;107 /*on left button press, remember first corner of rectangle around object*/
108 if (event ==CV_EVENT_LBUTTONDOWN)109 {110 n = g_mousep->n;111 if (n ==MAX_OBJECTS)112 {113 return;114 }115 prev_pt.x =x;116 prev_pt.y =y;117 //cout<
118 pressed = true;119 }120 /*on left button up, finalise the rectangle and draw it in black*/
121 else if(event == CV_EVENT_LBUTTONUP &&pressed)122 {123 /*1 == mode for selecting points*/
124 if (1 == g_mousep->mode)125 {126 n = g_mousep->n;127 if (n ==MAX_OBJECTS)128 {129 return;130 }131 cur_pt.x =x;132 cur_pt.y =y;133 g_mousep->pts.push_back(cur_pt);134 int radius = 3;135 circle(*g_mousep->image,cur_pt,radius,CV_RGB(255,0,0));136 imshow(g_mousep->win_name,*g_mousep->image);137 pressed = false;138 g_mousep->n++;139 }140 /*2 == mode for selecting rectangles*/
141 else if (2 == g_mousep->mode)142 {143 n = g_mousep->n;144 if (n ==MAX_OBJECTS)145 {146 return;147 }148 cur_pt.x =x;149 cur_pt.y =y;150 g_mousep->pts.push_back(prev_pt);151 g_mousep->pts.push_back(cur_pt);152 //cout<
153 rectangle(*g_mousep->image,prev_pt,cur_pt,CV_RGB(0,0,255));154 imshow(g_mousep->win_name,*g_mousep->image);155 pressed = false;156 g_mousep->n++;157 }158 else if (3 == g_mousep->mode)159 {160 n = g_mousep->n;161
162 }163 }164 else if (event == CV_EVENT_MOUSEMOVE && pressed &&CV_EVENT_FLAG_LBUTTON)165 {166 if (2 == g_mousep->mode)167 {168 n = g_mousep->n;169 if (n ==MAX_OBJECTS)170 {171 return;172 }173 cur_pt.x =x;174 cur_pt.y =y;175 Mat tmp = (*g_mousep->image).clone();176 //cout<
177 rectangle(tmp,prev_pt,cur_pt,CV_RGB(0,255,0));178 imshow(g_mousep->win_name,tmp);179 }180 }181 }