我有一个简单的OpenCV SimpleBlobDetector
任务cv::SimpleBlobDetector::Params params;
cv::Ptr<cv::SimpleBlobDetector> detector = cv::SimpleBlobDetector::create(params);
std::vector<cv::KeyPoint> keypoints;
detector->detect(crop, keypoints);
drawKeypoints(crop, keypoints, crop, cv::Scalar(0, 0, 255), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
cv::imshow("crop", crop);
cv::waitKey(0);
它没有检测到我图像中一半的斑点。 请看下面的图片,
我尝试添加参数并改变它们,在任何时候都没有检测到每一个斑点。 Blob检测是一种简单而直接的算法,应该在每个图像处理API中进行完全细化。这不是OpenCV的情况吗?
//params.minThreshold = 0;
//params.maxThreshold = 255;
//params.filterByArea = true;
//params.minArea = 1000;
//params.maxArea = 5000;
//params.filterByCircularity = true;
//params.minCircularity = 0.4;
//params.filterByConvexity = true;
//params.minConvexity = 0.87;
//params.filterByInertia = true;
//params.minInertiaRatio = 0.71;
我正在使用OpenCV 3.3或3.2,我似乎无法在源代码中找到版本号
答案 0 :(得分:1)
我不确定这是否能正确回答我的问题,但我不得不编写自己的blob检测,看来OpenCV SimpleBlobDetector并不那么简单。