static void OnMouse(int event, int x, int y, int flags, void*userdata);
void On_Mouse(int event, int x, int y);
void RunMain();
void TrackExecutor::OnMouse(int event, int x, int y, int flags, void *userdata)
{
TrackExecutor* temp = reinterpret_cast<TrackExecutor*>(userdata);
temp->On_Mouse(event,x,y);
}
void TrackExecutor::On_Mouse(int event, int x, int y)
{
if(event == EVENT_LBUTTONDOWN)
{
_pre_point = Point(x,y);
_start_drag = true;
}
if(_start_drag)
{
_rect.x_min = min(_pre_point.x,x);
_rect.y_min = min(_pre_point.y,y);
_rect.x_max = max(_pre_point.x,x);
_rect.y_max = max(_pre_point.y,y);
_selection = true;
}
if(event == EVENT_LBUTTONUP)
{
_start_drag = false;
_selection = false;
_start_tarck = true;
if(_rect.x_max-_rect.x_min>0 && _rect.y_max-_rect.y_min){
Rect r(_rect.x_min,_rect.y_min,_rect.x_max-_rect.x_min,_rect.y_max-_rect.y_min);
_tracker.init(r,_frame);
}
}
}
setMouseCallback("KcfTrackerWindow", OnMouse, this);