summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_pt/point_extractor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ftnoir_tracker_pt/point_extractor.cpp')
-rw-r--r--ftnoir_tracker_pt/point_extractor.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/ftnoir_tracker_pt/point_extractor.cpp b/ftnoir_tracker_pt/point_extractor.cpp
index fcdbbaed..0501a5c6 100644
--- a/ftnoir_tracker_pt/point_extractor.cpp
+++ b/ftnoir_tracker_pt/point_extractor.cpp
@@ -31,8 +31,6 @@ std::vector<cv::Vec2f> PointExtractor::extract_points(cv::Mat& frame)
const int region_size_min = s.min_point_size;
const int region_size_max = s.max_point_size;
- const int thres = s.threshold;
-
struct simple_blob
{
double radius;
@@ -56,12 +54,26 @@ std::vector<cv::Vec2f> PointExtractor::extract_points(cv::Mat& frame)
std::vector<simple_blob> blobs;
std::vector<std::vector<cv::Point>> contours;
+
+ const int thres = s.threshold;
+ if (!s.auto_threshold)
{
cv::Mat frame_bin_;
cv::threshold(frame_gray, frame_bin_, thres, 255, cv::THRESH_BINARY);
frame_bin.setTo(170, frame_bin_);
cv::findContours(frame_bin_, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
}
+ else
+ {
+ cv::Mat frame_bin_, tmp;
+ int scale = frame_gray.cols > 400 ? 2 : 1;
+ constexpr int size = 3;
+ static cv::Mat kernel = cv::getGaussianKernel(size * scale + 1, CV_32F);
+ cv::sepFilter2D(frame_gray, tmp, -1, kernel, kernel);
+ cv::threshold(tmp, frame_bin_, 0, 255, CV_THRESH_BINARY|CV_THRESH_OTSU);
+ frame_bin.setTo(170, frame_bin_);
+ cv::findContours(frame_bin_, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
+ }
int cnt = 0;