]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/commitdiff
Fix -f argument parsing
authorMichal Sojka <michal.sojka@cvut.cz>
Wed, 26 Sep 2018 11:29:34 +0000 (13:29 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Wed, 26 Sep 2018 15:00:34 +0000 (17:00 +0200)
We've also make p_cell_size public so that we can read it outside of the
class.

main_vot.cpp
src/kcf.cpp
src/kcf.h

index 3a846e86af00aa4999de8d8c4e904781596c6f97..69802225f17e0092d6101da7b8266deaad4b479d 100644 (file)
@@ -77,14 +77,23 @@ 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 = 128;
+            } 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;
+                }
+            }
+            int min_size = 2 * tracker.p_cell_size;
+            if (fit_size_x <  min_size || fit_size_x < min_size) {
+                fprintf(stderr, "Fit size %dx%d too small. Minimum is %dx%d.\n",
+                        fit_size_x, fit_size_y, min_size, min_size);
+                return 1;
+            }
             break;
         }
     }
index eb8d4c0a0c32007d2e3a4ab68b11b08803cb1bc2..d3bfb4be7a3a1c80902ddfa0280d423da191dcbc 100644 (file)
@@ -41,8 +41,8 @@ class Kcf_Tracker_Private {
 
 KCF_Tracker::KCF_Tracker(double padding, double kernel_sigma, double lambda, double interp_factor,
                          double output_sigma_factor, int cell_size)
-    : fft(*new FFT()), p_padding(padding), p_output_sigma_factor(output_sigma_factor), p_kernel_sigma(kernel_sigma),
-      p_lambda(lambda), p_interp_factor(interp_factor), p_cell_size(cell_size), d(*new Kcf_Tracker_Private)
+    : p_cell_size(cell_size), fft(*new FFT()), p_padding(padding), p_output_sigma_factor(output_sigma_factor), p_kernel_sigma(kernel_sigma),
+      p_lambda(lambda), p_interp_factor(interp_factor), d(*new Kcf_Tracker_Private)
 {
 }
 
index 753950a3add162691bf79a5abeebee2002956694..bd76fff4df7ac6be38e3559baa7d255d10d8d377 100644 (file)
--- a/src/kcf.h
+++ b/src/kcf.h
@@ -64,6 +64,7 @@ public:
     const bool m_use_subgrid_scale {true};
     const bool m_use_cnfeat {true};
     const bool m_use_linearkernel {false};
+    const int p_cell_size = 4;            //4 for hog (= bin_size)
 
     /*
     padding             ... extra area surrounding the target           (1.5)
@@ -107,7 +108,6 @@ private:
     const double p_kernel_sigma = 0.5;    //def = 0.5
     const double p_lambda = 1e-4;         //regularization in learning step
     const double p_interp_factor = 0.02;  //def = 0.02, linear interpolation factor for adaptation
-    const int p_cell_size = 4;            //4 for hog (= bin_size)
     cv::Size p_windows_size;
 
     const uint p_num_scales = m_use_scale ? 7 : 1;