]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blobdiff - main_vot.cpp
Leave 1px borders in visual debug window
[hercules2020/kcf.git] / main_vot.cpp
index 3a846e86af00aa4999de8d8c4e904781596c6f97..53d2ca62b55f922757dcde3d95eee5635f465b33 100644 (file)
@@ -43,6 +43,7 @@ int main(int argc, char *argv[])
         int option_index = 0;
         static struct option long_options[] = {
             {"debug",     no_argument,       0,  'd' },
+            {"visualDebug", no_argument, 0, 'p'},
             {"help",      no_argument,       0,  'h' },
             {"output",    required_argument, 0,  'o' },
             {"visualize", optional_argument, 0,  'v' },
@@ -50,7 +51,7 @@ int main(int argc, char *argv[])
             {0,           0,                 0,  0 }
         };
 
-        int c = getopt_long(argc, argv, "dhv::f::o:", long_options, &option_index);
+        int c = getopt_long(argc, argv, "dphv::f::o:", long_options, &option_index);
         if (c == -1)
             break;
 
@@ -58,6 +59,10 @@ int main(int argc, char *argv[])
         case 'd':
             tracker.m_debug = true;
             break;
+        case 'p':
+            tracker.m_visual_debug = true;
+            visualize_delay = 500;
+            break;
         case 'h':
             std::cerr << "Usage: \n"
                       << argv[0] << " [options]\n"
@@ -67,7 +72,7 @@ int main(int argc, char *argv[])
                       << " --visualize | -v[delay_ms]\n"
                       << " --output    | -o <output.txt>\n"
                       << " --debug     | -d\n"
-                      << " --fit       | -f[WxH]\n";
+                      << " --fit       | -f[W[xH]]\n";
             exit(0);
             break;
         case 'o':
@@ -77,14 +82,17 @@ int main(int argc, char *argv[])
             visualize_delay = optarg ? atol(optarg) : 1;
             break;
         case 'f':
-            std::string sizes = optarg ? optarg : "128x128";
-            std::string delimiter = "x";
-            size_t pos = sizes.find(delimiter);
-            std::string first_argument = sizes.substr(0, pos);
-            sizes.erase(0, pos + delimiter.length());
-
-            fit_size_x = stol(first_argument);
-            fit_size_y = stol(sizes);
+            if (!optarg) {
+                fit_size_x = fit_size_y = 0;
+            } else {
+                char tail;
+                if (sscanf(optarg, "%d%c", &fit_size_x, &tail) == 1) {
+                    fit_size_y = fit_size_x;
+                } else if (sscanf(optarg, "%dx%d%c", &fit_size_x, &fit_size_y, &tail) != 2) {
+                    fprintf(stderr, "Cannot parse -f argument: %s\n", optarg);
+                    return 1;
+                }
+            }
             break;
         }
     }
@@ -172,11 +180,21 @@ int main(int argc, char *argv[])
         std::cout << std::endl;
 
         if (visualize_delay >= 0) {
-            cv::rectangle(image, bb_rect, CV_RGB(0,255,0), 2);
-            cv::imshow("output", image);
+            cv::Point pt(bb.cx, bb.cy);
+            cv::Size size(bb.w, bb.h);
+            cv::RotatedRect rotatedRectangle(pt, size, bb.a);
+
+            cv::Point2f vertices[4];
+            rotatedRectangle.points(vertices);
+
+            for (int i = 0; i < 4; i++)
+                cv::line(image, vertices[i], vertices[(i + 1) % 4], cv::Scalar(0, 255, 0), 2);
+            cv::imshow("KCF output", image);
             int ret = cv::waitKey(visualize_delay);
-            if (visualize_delay > 0 && ret != -1 && ret != 255)
+            if ((visualize_delay > 0 && ret != -1 && ret < 128) ||
+                (visualize_delay == 0 && (ret == 27 /*esc*/ || ret == 'q')))
                 break;
+
         }
 
 //        std::stringstream s;