]> git.treefish.org Git - stickletrack.git/blobdiff - stickletrack.cpp
...
[stickletrack.git] / stickletrack.cpp
index 7462af79d348ec4545b131b87f7bf987317de6bd..7022276221b52da0891d38e0ff97c01f6e64f195 100755 (executable)
 #include <ctime>
 #include <iomanip>
 
 #include <ctime>
 #include <iomanip>
 
+// needed for _mkdir
+#if defined(_WIN32)
+#include <direct.h>
+#endif
+
 #include "masking.h"
 #include "stickletrack.h"
 #include "tracking.h"
 #include "masking.h"
 #include "stickletrack.h"
 #include "tracking.h"
@@ -57,6 +62,13 @@ void genBaseDir() {
   cout << "Using " << Props.basedir << " for data output." << endl;
 }
 
   cout << "Using " << Props.basedir << " for data output." << endl;
 }
 
+bool isWindowClosed (const char* name) {
+  if ( cvGetWindowHandle(name) == NULL )
+    return true;
+  else
+    return false;
+}
+
 void beforeExit() {
   cout << "Exitting ..." << endl;
 
 void beforeExit() {
   cout << "Exitting ..." << endl;
 
@@ -111,19 +123,19 @@ void drawTimes(Mat& mContours) {
   alles << framenum << " : " << fixed << (framenum)/(double)Props.fps << "s : +" << (double)moresleep/Props.fps << "ms";
 
   string text = alles.str();
   alles << framenum << " : " << fixed << (framenum)/(double)Props.fps << "s : +" << (double)moresleep/Props.fps << "ms";
 
   string text = alles.str();
-  int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;
+  int fontFace = FONT_HERSHEY_DUPLEX;
 
 
-  double fontScale = Props.diagonal/1000.0;
-  int thickness = 3;
+  double fontScale = Props.width / 600.0;
+  int thickness = Props.width / 250.0;
 
   int baseline=0;
   Size textSize = getTextSize(text, fontFace,
                              fontScale, thickness, &baseline);
 
 
   int baseline=0;
   Size textSize = getTextSize(text, fontFace,
                              fontScale, thickness, &baseline);
 
-  Point textOrg(10, 10 + textSize.height);
+  Point textOrg(Props.width*0.01, Props.width*0.01 + textSize.height);
 
   rectangle(mContours, Point(0, 0),
 
   rectangle(mContours, Point(0, 0),
-           Point(Props.width, 20+textSize.height),
+           Point(Props.width, Props.width*0.02 + textSize.height),
            Scalar(0,0,255), -1);
 
   putText(mContours, text, textOrg, fontFace, fontScale,
            Scalar(0,0,255), -1);
 
   putText(mContours, text, textOrg, fontFace, fontScale,
@@ -351,7 +363,7 @@ int process(VideoCapture& capture) {
   char filename[200];
   bool pleaseExit = false;
 
   char filename[200];
   bool pleaseExit = false;
 
-  namedWindow("original", CV_WINDOW_KEEPRATIO);
+  namedWindow("stickletrack_original", CV_WINDOW_KEEPRATIO);
     
   Mat frame, origframe, combinedmask;
 
     
   Mat frame, origframe, combinedmask;
 
@@ -361,6 +373,15 @@ int process(VideoCapture& capture) {
   Props.totframes = capture.get(CV_CAP_PROP_FRAME_COUNT);
   Props.diagonal = sqrt( pow(Props.width, 2) + pow(Props.height, 2) );
 
   Props.totframes = capture.get(CV_CAP_PROP_FRAME_COUNT);
   Props.diagonal = sqrt( pow(Props.width, 2) + pow(Props.height, 2) );
 
+  if ( Props.width == 0 || Props.height == 0 || Props.fps == 0 || Props.totframes == 0 ) {
+    cerr << "Something got wrong while reading video-file info!" << endl;
+    cerr << "Width: " << Props.width << endl;
+    cerr << "Height: " << Props.height << endl;
+    cerr << "FPS: " << Props.fps << endl;
+    cerr << "Total frames: " << Props.totframes << endl;
+    exit(1);
+  }
+
   Mat frameintime[BACKSECONDS*Props.fps];
 
   tagintime = new vector<tag>*[BACKSECONDS*Props.fps];
   Mat frameintime[BACKSECONDS*Props.fps];
 
   tagintime = new vector<tag>*[BACKSECONDS*Props.fps];
@@ -385,9 +406,7 @@ int process(VideoCapture& capture) {
   openTanjaLog();
 
   masking_init();
   openTanjaLog();
 
   masking_init();
-  tracking_init();
-
-  cvSetMouseCallback("contours_picture", mouseTracking, 0);
+  tracking_init(&mouseTracking);
 
   capture.set(CV_CAP_PROP_POS_FRAMES, 0);
 
 
   capture.set(CV_CAP_PROP_POS_FRAMES, 0);
 
@@ -437,7 +456,8 @@ int process(VideoCapture& capture) {
 
       gotoframe = framenum + 1;
  
 
       gotoframe = framenum + 1;
  
-      imshow("original", origframe/255.0);
+      if ( ! isWindowClosed("stickletrack_original") )
+       imshow("stickletrack_original", origframe/255.0);
     }
     
     drawTimes(tracking_getFrame());
     }
     
     drawTimes(tracking_getFrame());
@@ -446,7 +466,8 @@ int process(VideoCapture& capture) {
       circle( tracking_getFrame(), Point2f(tags[nearestTags[0]].x, tags[nearestTags[0]].y), Props.diagonal / 100.0, Scalar(0,0,255), -1, 8 );
     }
    
       circle( tracking_getFrame(), Point2f(tags[nearestTags[0]].x, tags[nearestTags[0]].y), Props.diagonal / 100.0, Scalar(0,0,255), -1, 8 );
     }
    
-    tracking_showFrame();
+    if ( tracking_showFrame() )
+      pleaseExit = true;
 
     char key;
 
 
     char key;
 
@@ -503,8 +524,6 @@ int main(int ac, char** av) {
     cerr << "Failed to open a video device or video file!\n" << endl;
     return 1;
   }
     cerr << "Failed to open a video device or video file!\n" << endl;
     return 1;
   }
-
-   cout << "Exit with q if you want to save your data!!!" << endl;
   
   return process(capture);
 }
   
   return process(capture);
 }