#ifndef __SNAPSHOT_H__ #define __SNAPSHOT_H__ #include "../CD.h" #include #include #include #include //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 flags; //标志位,标记快照框应该如何判断,left:0 top:1 right:2 bottom:3 vector 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 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 deleteTrackers); //辅助函数 bool LegalArea(int maxArea, int lastArea, int left, int top, int right, int bottom); bool LegalPos(bitset flags, int left, int top, int right, int bottom, int imgHeight, int imgWidth); bool saveSnapshot; //控制是否开启快照功能 public: char mResDir[260]; map snapshots; VIDEO_OBJECT_SNAPSHOT_CALLBACK mVideoObjSnapshotCallBack; bool checkBoxSize, checkDistance; MRECT minBoxSize[DETECTTYPE]; int minDistance[EDGES]; boost::mutex threadMutex; boost::thread ProcessThread; vector deleteID; vector tempDeleteID; bool beginSaveSnapshot; int saveTimes; }; #endif // __SNAPSHOT_H__