Skip to content

Commit 93bec33

Browse files
committed
Instead z = 0 save a width to height ratio
1 parent 703bd0f commit 93bec33

3 files changed

Lines changed: 68 additions & 80 deletions

File tree

Tracker/Ctracker.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,21 @@ class SaveTrajectories
4040
{
4141
std::string delim = ",";
4242
int type = 2;
43-
track_t z = 0;
4443

4544
if (track.m_trace.size() > 25)
4645
{
4746
for (size_t j = 0; j < track.m_trace.size(); ++j)
4847
{
49-
Point_t pt = track.m_trace[j];
50-
51-
m_file << track.m_trace.FrameInd(j) << delim << track.m_trackID << delim << type << delim << pt.x << delim << pt.y << delim << z << delim << track.m_trace.Time(j) << delim << j << std::endl;
48+
const TrajectoryPoint& pt = track.m_trace.at(j);
49+
50+
m_file << pt.m_frameInd << delim
51+
<< track.m_trackID << delim
52+
<< type << delim
53+
<< pt.m_prediction.x << delim
54+
<< pt.m_prediction.y << delim
55+
<< (static_cast<track_t>(pt.m_size.width) / static_cast<track_t>(pt.m_size.width))<< delim
56+
<< pt.m_time << delim
57+
<< j << std::endl;
5258
}
5359
}
5460
return true;

Tracker/track.h

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ struct TrajectoryPoint
3030
/// \brief TrajectoryPoint
3131
/// \param prediction
3232
///
33-
TrajectoryPoint(const Point_t& prediction, int64 currTime, int frameInd)
34-
: m_hasRaw(false), m_prediction(prediction), m_time(currTime), m_frameInd(frameInd)
33+
TrajectoryPoint(const Point_t& prediction, cv::Size size, int64 currTime, int frameInd)
34+
:
35+
m_hasRaw(false),
36+
m_prediction(prediction),
37+
m_size(size),
38+
m_time(currTime),
39+
m_frameInd(frameInd)
3540
{
3641
}
3742

@@ -40,14 +45,21 @@ struct TrajectoryPoint
4045
/// \param prediction
4146
/// \param raw
4247
///
43-
TrajectoryPoint(const Point_t& prediction, const Point_t& raw, int64 currTime, int frameInd)
44-
: m_hasRaw(true), m_prediction(prediction), m_raw(raw), m_time(currTime), m_frameInd(frameInd)
48+
TrajectoryPoint(const Point_t& prediction, const Point_t& raw, cv::Size size, int64 currTime, int frameInd)
49+
:
50+
m_hasRaw(true),
51+
m_prediction(prediction),
52+
m_raw(raw),
53+
m_size(size),
54+
m_time(currTime),
55+
m_frameInd(frameInd)
4556
{
4657
}
4758

4859
bool m_hasRaw;
4960
Point_t m_prediction;
5061
Point_t m_raw;
62+
cv::Size m_size;
5163
int64 m_time;
5264
int m_frameInd;
5365
};
@@ -80,33 +92,13 @@ class Trace
8092
}
8193

8294
///
83-
/// \brief HasRaw
95+
/// \brief at
8496
/// \param i
8597
/// \return
8698
///
87-
bool HasRaw(size_t i) const
99+
const TrajectoryPoint& at(size_t i) const
88100
{
89-
return m_trace[i].m_hasRaw;
90-
}
91-
92-
///
93-
/// \brief Time
94-
/// \param i
95-
/// \return
96-
///
97-
int64 Time(size_t i) const
98-
{
99-
return m_trace[i].m_time;
100-
}
101-
102-
///
103-
/// \brief FrameInd
104-
/// \param i
105-
/// \return
106-
///
107-
int FrameInd(size_t i) const
108-
{
109-
return m_trace[i].m_frameInd;
101+
return m_trace[i];
110102
}
111103

112104
///
@@ -122,13 +114,13 @@ class Trace
122114
/// \brief push_back
123115
/// \param prediction
124116
///
125-
void push_back(const Point_t& prediction, int64 currTime, int frameInd)
117+
void push_back(const Point_t& prediction, cv::Size size, int64 currTime, int frameInd)
126118
{
127-
m_trace.push_back(TrajectoryPoint(prediction, currTime, frameInd));
119+
m_trace.push_back(TrajectoryPoint(prediction, size, currTime, frameInd));
128120
}
129-
void push_back(const Point_t& prediction, const Point_t& raw, int64 currTime, int frameInd)
121+
void push_back(const Point_t& prediction, const Point_t& raw, cv::Size size, int64 currTime, int frameInd)
130122
{
131-
m_trace.push_back(TrajectoryPoint(prediction, raw, currTime, frameInd));
123+
m_trace.push_back(TrajectoryPoint(prediction, raw, size, currTime, frameInd));
132124
}
133125

134126
///
@@ -221,7 +213,7 @@ class CTrack
221213
{
222214
m_kalman = new TKalmanFilter(kalmanType, pt, deltaTime, accelNoiseMag);
223215
}
224-
m_trace.push_back(pt, pt, currTime, frameInd);
216+
m_trace.push_back(pt, pt, m_lastRegion.m_rect.size(), currTime, frameInd);
225217
}
226218

227219
///
@@ -288,11 +280,11 @@ class CTrack
288280
if (dataCorrect)
289281
{
290282
m_lastRegion = region;
291-
m_trace.push_back(m_predictionPoint, pt, currTime, frameInd);
283+
m_trace.push_back(m_predictionPoint, pt, m_lastRegion.m_rect.size(), currTime, frameInd);
292284
}
293285
else
294286
{
295-
m_trace.push_back(m_predictionPoint, currTime, frameInd);
287+
m_trace.push_back(m_predictionPoint, m_lastRegion.m_rect.size(), currTime, frameInd);
296288
}
297289

298290
if (m_trace.size() > max_trace_length)

main.cpp

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void MouseTracking(int argc, char** argv)
100100
cv::VideoWriter writer;
101101

102102
int k = 0;
103-
cv::Scalar Colors[] = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 255, 255) };
103+
std::vector<cv::Scalar> colors = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
104104
cv::namedWindow("Video");
105105
cv::Mat frame = cv::Mat(800, 800, CV_8UC3);
106106

@@ -158,7 +158,7 @@ void MouseTracking(int argc, char** argv)
158158
{
159159
for (size_t j = 0; j < tracks->m_trace.size() - 1; j++)
160160
{
161-
cv::line(frame, tracks->m_trace[j], tracks->m_trace[j + 1], Colors[i % 6], 2, CV_AA);
161+
cv::line(frame, tracks->m_trace[j], tracks->m_trace[j + 1], colors[i % colors.size()], 2, CV_AA);
162162
}
163163
}
164164
}
@@ -174,6 +174,29 @@ void MouseTracking(int argc, char** argv)
174174
}
175175
}
176176

177+
// ----------------------------------------------------------------------
178+
void DrawTrack(cv::Mat frame,
179+
const CTrack& track,
180+
const std::vector<cv::Scalar>& colors
181+
)
182+
{
183+
cv::rectangle(frame, track.GetLastRect(), cv::Scalar(0, 255, 0), 1, CV_AA);
184+
185+
cv::Scalar cl = colors[track.m_trackID % colors.size()];
186+
187+
for (size_t j = 0; j < track.m_trace.size() - 1; ++j)
188+
{
189+
const TrajectoryPoint& pt1 = track.m_trace.at(j);
190+
const TrajectoryPoint& pt2 = track.m_trace.at(j + 1);
191+
192+
cv::line(frame, pt1.m_prediction, pt2.m_prediction, cl, 1, CV_AA);
193+
if (!pt2.m_hasRaw)
194+
{
195+
cv::circle(frame, pt2.m_prediction, 4, cl, 1, CV_AA);
196+
}
197+
}
198+
}
199+
177200
// ----------------------------------------------------------------------
178201
void MotionDetector(int argc, char** argv)
179202
{
@@ -192,7 +215,7 @@ void MotionDetector(int argc, char** argv)
192215

193216
cv::VideoWriter writer;
194217

195-
cv::Scalar Colors[] = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
218+
std::vector<cv::Scalar> colors = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
196219
cv::VideoCapture capture(inFile);
197220
if (!capture.isOpened())
198221
{
@@ -214,7 +237,7 @@ void MotionDetector(int argc, char** argv)
214237
// But on high resolution videos with many objects may be to slow
215238
bool useLocalTracking = true;
216239

217-
CDetector detector(BackgroundSubtract::ALG_CNT, useLocalTracking, gray);
240+
CDetector detector(BackgroundSubtract::ALG_MOG, useLocalTracking, gray);
218241
detector.SetMinObjectSize(cv::Size(gray.cols / 50, gray.rows / 50));
219242
//detector.SetMinObjectSize(cv::Size(2, 2));
220243

@@ -277,18 +300,7 @@ void MotionDetector(int argc, char** argv)
277300
cv::Size2f(0.5f, 4.0f)) // Min and max ratio: width / height
278301
)
279302
{
280-
cv::rectangle(frame, track->GetLastRect(), cv::Scalar(0, 255, 0), 1, CV_AA);
281-
282-
cv::Scalar cl = Colors[track->m_trackID % 9];
283-
284-
for (size_t j = 0; j < track->m_trace.size() - 1; ++j)
285-
{
286-
cv::line(frame, track->m_trace[j], track->m_trace[j + 1], cl, 1, CV_AA);
287-
if (!track->m_trace.HasRaw(j + 1))
288-
{
289-
cv::circle(frame, track->m_trace[j + 1], 4, cl, 1, CV_AA);
290-
}
291-
}
303+
DrawTrack(frame, *track, colors);
292304
}
293305
}
294306

@@ -342,7 +354,7 @@ void FaceDetector(int argc, char** argv)
342354

343355
cv::VideoWriter writer;
344356

345-
cv::Scalar Colors[] = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
357+
std::vector<cv::Scalar> colors = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
346358
cv::VideoCapture capture(inFile);
347359
if (!capture.isOpened())
348360
{
@@ -445,18 +457,7 @@ void FaceDetector(int argc, char** argv)
445457
cv::Size2f(0.1f, 8.0f)) // Min and max ratio: width / height
446458
)
447459
{
448-
cv::rectangle(frame, track->GetLastRect(), cv::Scalar(0, 255, 0), 1, CV_AA);
449-
450-
cv::Scalar cl = Colors[track->m_trackID % 9];
451-
452-
for (size_t j = 0; j < track->m_trace.size() - 1; ++j)
453-
{
454-
cv::line(frame, track->m_trace[j], track->m_trace[j + 1], cl, 1, CV_AA);
455-
if (!track->m_trace.HasRaw(j + 1))
456-
{
457-
cv::circle(frame, track->m_trace[j + 1], 4, cl, 1, CV_AA);
458-
}
459-
}
460+
DrawTrack(frame, *track, colors);
460461
}
461462
}
462463

@@ -504,7 +505,7 @@ void PedestrianDetector(int argc, char** argv)
504505

505506
cv::VideoWriter writer;
506507

507-
cv::Scalar Colors[] = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
508+
std::vector<cv::Scalar> colors = { cv::Scalar(255, 0, 0), cv::Scalar(0, 255, 0), cv::Scalar(0, 0, 255), cv::Scalar(255, 255, 0), cv::Scalar(0, 255, 255), cv::Scalar(255, 0, 255), cv::Scalar(255, 127, 255), cv::Scalar(127, 0, 255), cv::Scalar(127, 0, 127) };
508509
cv::VideoCapture capture(inFile);
509510
if (!capture.isOpened())
510511
{
@@ -625,18 +626,7 @@ void PedestrianDetector(int argc, char** argv)
625626
cv::Size2f(0.1f, 8.0f)) // Min and max ratio: width / height
626627
)
627628
{
628-
cv::rectangle(frame, track->GetLastRect(), cv::Scalar(0, 255, 0), 1, CV_AA);
629-
630-
cv::Scalar cl = Colors[track->m_trackID % 9];
631-
632-
for (size_t j = 0; j < track->m_trace.size() - 1; ++j)
633-
{
634-
cv::line(frame, track->m_trace[j], track->m_trace[j + 1], cl, 1, CV_AA);
635-
if (!track->m_trace.HasRaw(j + 1))
636-
{
637-
cv::circle(frame, track->m_trace[j + 1], 4, cl, 1, CV_AA);
638-
}
639-
}
629+
DrawTrack(frame, *track, colors);
640630
}
641631
}
642632

0 commit comments

Comments
 (0)