annotate c/track-features.cpp @ 1222:69b531c7a061

added methods to reset trajectories and change object coordinates (including features)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 20 Jun 2023 15:42:19 -0400
parents a52653dca25d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }