问题描述:在测试目标跟踪算法时,需要选择不同区域作为目标,进行目标跟踪,测试目标跟踪的效果。
解决思路:
1.OpenCV中提供了鼠标交互控制,利用setMouseCallback()给固定的窗口设置鼠标回调函数。
2.在鼠标回调函数中,选择感兴趣区域。
代码实现如下,将感兴趣区域封装在MouseSelect类中,提供选择点和矩形框两种模式。
1 #pragma once 2 #ifndef __MOUSESELECT_H__ 3 #define __MOUSESELECT_H__ 4 5 #include <opencv2/opencv.hpp> 6 #include <iostream> 7 8 #define MAX_OBJECTS 10 9 using namespace cv; 10 using namespace std; 11 typedef struct MouseSelectParams 12 { 13 vector<Point> pts; //Points of selected 14 char *win_name; 15 Mat *image; 16 unsigned int mode; //1 Point,2 Rect 17 int n; // selected object number 18 }MouseSelectParams; 19 20 void on_mouse(int event,int x,int y,int flags,void *param); 21 class MouseSelect 22 { 23 public: 24 MouseSelect(); 25 ~MouseSelect(); 26 27 void select_rect(Mat &frame); 28 void select_point(Mat &frame); 29 30 vector<Point> vPoints; 31 vector<Rect> vRects; 32 unsigned int obj_selected; 33 private: 34 int get_rects(Mat &frame); 35 int get_points(Mat &frame); 36 37 }; 38 #endif