Blame view

vpt/src/CD/sort/SnapShot.h 1.95 KB
144cd8c4   Hu Chunming   v6.0.0 替换模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  #ifndef __SNAPSHOT_H__

  #define __SNAPSHOT_H__

  #include "../CD.h"

  #include <map>

  #include <opencv2/opencv.hpp>

  #include <bitset>

  #include <boost/thread/thread.hpp>

  

  

  //using namespace cv;

  

  const int SCALE_OUT = 10; //判断目标框初始位置时,在最小距离的基础上适当外扩

  const int EDGESIZE = 4;

  

  typedef struct OBJECT_SNAPSHOT_INFO

  {

  	VIDEO_OBJECT_SNAPSHOT    objInfo;  //快照基本信息(保存的最优信息)

  	//unsigned char*         objImg;   //快照图像信息(保存最优图像)

  	cv::Mat                  objImg;   //快照图像信息(保存最优图像),我先用Mat方便,之后看是否改为char*

  	int                      area;     //改快照上一帧的面积(为了去除突变的快照)

  	bitset<EDGESIZE>         flags;    //标志位,标记快照框应该如何判断,left:0  top:1  right:2  bottom:3

  

  	vector<int>              voteIndex;

  

  }OBJECT_SNAPSHOT_INFO;

  

  

  class SnapShot

  {

  public:

  	SnapShot(char* ResDir, VIDEO_OBJECT_SNAPSHOT_CALLBACK VideoObjSnapshotCallBack, SNAPSHOT_PARAMETER *ssParam);

  	~SnapShot();

  

  	void ResetSnapShot();

  

  	void SnapshotProcess(CD_Result *result, cv::Mat img, vector<int> deleteTrackers, int frameCount);

  	void AddSnapshot(CD_ObjInfo object, cv::Mat img, int frameCount);

  	void UpdateSnapshot(CD_ObjInfo object, cv::Mat img, int frameCount);

  	void SaveSnapshot(vector<int> deleteTrackers);

    

  	//辅助函数

  	bool LegalArea(int maxArea, int lastArea, int left, int top, int right, int bottom);

  	bool LegalPos(bitset<EDGESIZE> flags, int left, int top, int right, int bottom, int imgHeight, int imgWidth);

  

  

  	bool saveSnapshot;  //控制是否开启快照功能

  

  public:

  	char mResDir[260];

  	map<int, OBJECT_SNAPSHOT_INFO> snapshots;

  	VIDEO_OBJECT_SNAPSHOT_CALLBACK mVideoObjSnapshotCallBack;

  

  	bool checkBoxSize, checkDistance;

  	MRECT minBoxSize[DETECTTYPE];

  	int minDistance[EDGES];

  

  	boost::mutex threadMutex;

  	boost::thread ProcessThread;

  	vector<int> deleteID;

  	vector<int> tempDeleteID;

  	bool beginSaveSnapshot;

  

  	int saveTimes;

  };

  #endif // __SNAPSHOT_H__