annotate c/track-features.cpp @ 398:3399bd48cb40

Ajout d'une méthode pour obtenir le nombre de FPS Méthode de capture des trames vidéos plus résistante aux erreur Utilisation d'un dictionnaire pour les fichier de configuration afin de garder le nom des sections
author Jean-Philippe Jodoin <jpjodoin@gmail.com>
date Mon, 29 Jul 2013 13:46:07 -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 }