我想检测一些斑点但只有一定大小 - 在最小和最大区域之间。 当我设置这样的参数时:
cv::SimpleBlobDetector::Params params;
params.filterByInertia = false;
params.filterByConvexity = false;
params.filterByColor = true;
params.blobColor = 0; //filter only black
params.filterByArea = true;
params.minArea = 10.0f;
params.maxArea = 20.0f; //I want the diameter of blob to be between those values
并检查作为结果检测到的每个blob的keypoint.size值,我看到检测到的斑点非常小(小于10)。我想要获得的大块(在最小/最大区域之间的直径)被忽略。为什么会这样,考虑按区域过滤?我对区域过滤的理解是错误的,还是params设置错误? 在调用detect()之前,我是否需要以某种方式处理图像?
答案 0 :(得分:1)
params.minArea
和params.maxArea
按区域过滤blob,如果我没记错,您当前正在搜索面积介于10到20像素之间的blob(请注意,这是标准480p帧非常小)。
如果您想按直径进行过滤,请使用此选项(假设blob为圆圈):
params.minArea = 3.14159 * 5.0f * 5.0f; // Min 10.0f diameter
params.minArea = 3.14159 * 10.0f * 10.0f; // Max 20.0f diameter