Mercurial > hg > nsaunier > traffic-intelligence
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 |
| 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 } |
