问题描述:在测试目标跟踪算法时,需要选择不同区域作为目标,进行目标跟踪,测试目标跟踪的效果。
解决思路:
1.OpenCV中提供了鼠标交互控制,利用setMouseCallback()给固定的窗口设置鼠标回调函数。
2.在鼠标回调函数中,选择感兴趣区域。
代码实现如下,将感兴趣区域封装在MouseSelect类中,提供选择点和矩形框两种模式。
#pragma once
#ifndef __MOUSESELECT_H__
#define __MOUSESELECT_H__
#include
#include
#define MAX_OBJECTS 10
using namespace cv;
using namespace std;
typedef struct MouseSelectParams
{
vector pts; //Points of selected
char *win_name;
Mat *image;
unsigned int mode; //1 Point,2 Rect
int n; // selected object number
}MouseSelectParams;
void on_mouse(int event,int x,int y,int flags,void *param);
class MouseSelect
{
public:
MouseSelect();
~MouseSelect();
void select_rect(Mat &frame);
void select_point(Mat &frame);
vector vPoints;
vector vRects;
unsigned int obj_selected;
private:
int get_rects(Mat &frame);
int get_points(Mat &frame);
};
#endif
#include "MouseSelect.h"
MouseSelectParams *g_mousep;
MouseSelect::MouseSelect() {}
MouseSelect::~MouseSelect() {}
void MouseSelect::select_rect(Mat &frame)
{
obj_selected = ;
while( == obj_selected)
{
obj_selected = get_rects(frame);
if (obj_selected == )
{
cout<
}
}
}
void MouseSelect::select_point(Mat &frame)
{
obj_selected = ;
while( == obj_selected)
{
obj_selected = get_points(frame);
if (obj_selected == )