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;
}
}
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)
{
}
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)
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;