Mercurial Hosting > traffic-intelligence
annotate c/track-features.cpp @ 1221:5a207c838323
correcting recursive errors
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 19 Jun 2023 22:37:45 -0400 |
parents | a52653dca25d |
children |
rev | line source |
---|---|
18
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
1 #include "cvutils.hpp" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
2 #include "utils.hpp" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
3 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
4 #include "klt.h" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
5 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
6 #include "opencv/cv.h" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
7 #include "opencv/highgui.h" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
8 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
9 #include <iostream> |
70
a52653dca25d
got track features to compile, updated paths to headers and libraries for OpenCV 2
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
20
diff
changeset
|
10 #include <fstream> |
18
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
11 #include <string> |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
12 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
13 using namespace std; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
14 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
15 #define FEAT_VAL(x) ((x) > 0) ? 1 : x // 1 means the features was replaced |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
16 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
17 void cvGetCharArray(IplImage *image, unsigned char* img, int width, int height); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
18 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
19 int main(int argc, char *argv[]) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
20 //cout << "Hello World" << endl; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
21 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
22 KLT_TrackingContext tc; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
23 KLT_FeatureList fl; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
24 KLT_FeatureTable ft; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
25 KLT_Feature feature; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
26 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
27 int i,j; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
28 string fnamein, fnameout, tmp; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
29 string sequenceDir="../test-images"; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
30 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
31 IplImage *image; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
32 int width, height; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
33 unsigned char *img1, *img2; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
34 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
35 // CvCapture *inputVideo = 0; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
36 // if (argc == 1) |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
37 // inputVideo = cvCreateCameraCapture(-1); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
38 // else |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
39 // inputVideo = cvCaptureFromFile(argv[1]); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
40 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
41 int frameNum = 0; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
42 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
43 if (argc < 7){ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
44 printf("\ntrack sequenceFile startFrame numFrames numFeatures min_dist window_size\n"); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
45 return (-1); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
46 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
47 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
48 // parameters for tracking |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
49 char* sequenceFile = argv[1]; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
50 int startFrame = (int) strtol(argv[2],NULL,10); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
51 int nFrames = (int) strtol(argv[3],NULL,10); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
52 int nFeatures = (int) strtol(argv[4],NULL,10); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
53 int mindist = (int) strtol(argv[5],NULL,10); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
54 int window_size = (int) strtol(argv[6],NULL,10); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
55 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
56 fnamein = sequenceFile;//sequenceDir+"/"++".avi" |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
57 CvCapture* sequence = cvCaptureFromFile(fnamein.c_str()); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
58 if (sequence == NULL) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
59 cout << "Pb reading " << fnamein << " file."; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
60 exit(0); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
61 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
62 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
63 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
64 // from http://ai.stanford.edu/~dstavens/cs223b/optical_flow_demo.cpp |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
65 /* This is a hack. If we don't call this first then getting capture |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
66 * properties (below) won't work right. This is an OpenCV bug. We |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
67 * ignore the return value here. But it's actually a video frame. |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
68 */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
69 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
70 cvQueryFrame(sequence); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
71 /* Read the video's frame size out of the AVI. */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
72 CvSize frame_size; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
73 frame_size.height = cvGetCaptureProperty(sequence, CV_CAP_PROP_FRAME_HEIGHT ); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
74 frame_size.width = cvGetCaptureProperty(sequence, CV_CAP_PROP_FRAME_WIDTH ); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
75 /* Determine the number of frames in the AVI. */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
76 int number_of_frames; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
77 /* Go to the end of the AVI (ie: the fraction is "1") */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
78 cvSetCaptureProperty(sequence, CV_CAP_PROP_POS_AVI_RATIO, 1.); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
79 /* Now that we're at the end, read the AVI position in frames */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
80 number_of_frames = cvGetCaptureProperty( sequence, CV_CAP_PROP_POS_FRAMES ); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
81 /* Return to the beginning */ |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
82 cvSetCaptureProperty(sequence, CV_CAP_PROP_POS_FRAMES, 0. ); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
83 printf("%d %d %d\n", frame_size.height, frame_size.width, number_of_frames); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
84 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
85 if (nFrames < 0) |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
86 nFrames = number_of_frames; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
87 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
88 // go forward to the startFrame |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
89 //cvNamedWindow("Image",1); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
90 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
91 for (i=1; i<startFrame; i++) { // pb if more than the number of frames |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
92 image = cvQueryFrame(sequence); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
93 //if (i%1000==0) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
94 //printf("%d\n", i); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
95 //cvShowImage("Image",image); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
96 //WaitKey(0); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
97 //} |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
98 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
99 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
100 img1 = (unsigned char*)malloc(frame_size.height*frame_size.width*sizeof(unsigned char)); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
101 img2 = (unsigned char*)malloc(frame_size.height*frame_size.width*sizeof(unsigned char)); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
102 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
103 // KLT initialization |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
104 tc = KLTCreateTrackingContext(); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
105 fl = KLTCreateFeatureList(nFeatures); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
106 ft = KLTCreateFeatureTable(nFrames, nFeatures); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
107 tc->sequentialMode = TRUE; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
108 tc->mindist = mindist; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
109 tc->window_width = window_size; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
110 tc->window_height = window_size; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
111 KLTSetVerbosity(0); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
112 tc->affineConsistencyCheck = 2; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
113 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
114 // initialization of the first frame |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
115 image = cvQueryFrame(sequence); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
116 cvGetCharArray(image, img1, frame_size.width, frame_size.height); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
117 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
118 KLTSelectGoodFeatures(tc, img1, frame_size.width, frame_size.height, fl); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
119 KLTStoreFeatureList(fl, ft, 0); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
120 //KLTWriteFeatureListToPPM(fl, img1, frame_size.width, frame_size.height, "feat0000.ppm"); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
121 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
122 i=1; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
123 while (((image = cvQueryFrame(sequence)) != NULL) && (i<nFrames)) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
124 cvGetCharArray(image, img2, frame_size.width, frame_size.height); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
125 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
126 // feature tracking |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
127 KLTTrackFeatures(tc, img1, img2, frame_size.width, frame_size.height, fl); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
128 KLTReplaceLostFeatures(tc, img2, frame_size.width, frame_size.height, fl); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
129 KLTStoreFeatureList(fl, ft, i); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
130 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
131 img1 = img2; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
132 // unquote if you want to write the frames with the tracked features. |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
133 //sprintf(fnameout, "feat%04d.ppm", startFrame+i); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
134 //KLTWriteFeatureListToPPM(fl, img2, frame_size.width, frame_size.height, fnameout); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
135 //printf("%04d\n", i); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
136 i++; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
137 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
138 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
139 printf("%d\n", i); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
140 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
141 // writing feature file |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
142 fnameout = "features.txt";//"features-"%s"-"%d"-"%d"-"%d".txt", sequenceFile, nFeatures, tc->mindist, tc->window_width); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
143 //KLTWriteFeatureTable(ft, fnameout, "%5.1f"); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
144 |
20
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
145 int precision = 2; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
146 ofstream out; |
70
a52653dca25d
got track features to compile, updated paths to headers and libraries for OpenCV 2
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
20
diff
changeset
|
147 ::openWriteScientificPrecision(out, fnameout, precision); |
20
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
148 |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
149 //fprintf(out,"%%StartFrame: 0\n"); |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
150 //fprintf(out,"%%NumFrames: %d\n",nFrames); |
18
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
151 |
20
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
152 // 1 feature / line |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
153 // x1 y1 val1 x2 y2 val2 ... (1 2... frame numbers) |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
154 for (j = 0 ; j < ft->nFeatures ; j++) { |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
155 int firstFrameNum = startFrame; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
156 stringstream lx, ly; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
157 for (i = 0 ; i < ft->nFrames ; i++){ |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
158 feature = ft->feature[j][i]; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
159 //fprintf(out,"%.2f %.2f %d ",(float)feature->x,(float)feature->y,FEAT_VAL(feature->val)); |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
160 lx << feature->x << " "; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
161 ly << feature->y << " "; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
162 if (feature->val <= 0) { |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
163 // print the feature |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
164 out << firstFrameNum << " " << startFrame+i << endl; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
165 out << lx << endl; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
166 out << ly << endl; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
167 // velocity |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
168 out << "%" << endl; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
169 firstFrameNum = i+1; |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
170 lx.clear(); |
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
171 ly.clear(); |
70
a52653dca25d
got track features to compile, updated paths to headers and libraries for OpenCV 2
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
20
diff
changeset
|
172 } |
20
ef0d7caf8e91
draft code for feature saving (UBC format)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
18
diff
changeset
|
173 } |
70
a52653dca25d
got track features to compile, updated paths to headers and libraries for OpenCV 2
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
20
diff
changeset
|
174 } |
18
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
175 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
176 cvReleaseCapture(&sequence); |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
177 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
178 return 1; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
179 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
180 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
181 // converts a frame from IplImage format (OpenCV) to an array of unsigned char for KLT |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
182 void cvGetCharArray(IplImage *image, unsigned char* img, int width, int height) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
183 int x, y; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
184 |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
185 for(y=0 ; y < height ; y++) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
186 for(x=0; x < width ; x++) { |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
187 img[(height-y-1)*width+x] = (image->imageData+image->widthStep*y)[x*3]; |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
188 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
189 } |
ef35d5f111e4
incorporated code to use KLT
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
190 } |