Fix bugs in blob detector
When passing grayscale images by value, they can't be changed inside a
function. Also, fixed an infinite loop when more than 0 but less than 3
blobs were getting detected.
Signed-off-by: Milind Upadhyay <milind.upadhyay@gmail.com>
Change-Id: I5403d02aa9e3df07800791312f0e18ee81824868
diff --git a/y2022/vision/blob_detector.cc b/y2022/vision/blob_detector.cc
index 8fc70f6..8ac96cd 100644
--- a/y2022/vision/blob_detector.cc
+++ b/y2022/vision/blob_detector.cc
@@ -200,8 +200,10 @@
// If we see more than this number of blobs after filtering based on
// color/size, the circle fit may detect noise so just return no blobs.
+ constexpr size_t kMinFilteredBlobs = 3;
constexpr size_t kMaxFilteredBlobs = 50;
- if (filtered_blobs.size() > 0 && filtered_blobs.size() <= kMaxFilteredBlobs) {
+ if (filtered_blobs.size() >= kMinFilteredBlobs &&
+ filtered_blobs.size() <= kMaxFilteredBlobs) {
constexpr size_t kRansacIterations = 15;
for (size_t i = 0; i < kRansacIterations; i++) {
// Pick 3 random blobs and see how many fit on their circle
@@ -291,7 +293,7 @@
}
void BlobDetector::ExtractBlobs(
- cv::Mat rgb_image, cv::Mat binarized_image, cv::Mat blob_image,
+ cv::Mat rgb_image, cv::Mat &binarized_image, cv::Mat blob_image,
std::vector<std::vector<cv::Point>> &filtered_blobs,
std::vector<std::vector<cv::Point>> &unfiltered_blobs,
std::vector<BlobStats> &blob_stats, cv::Point ¢roid) {