openCV 中的 Blob Detection 效果很好,但由于某些原因它无法检测特定图像
Blob Detection in openCV works well, but for some reason it fails for a specific image
由于 openCV (4.2.0.34) 中 SimpleBlobDetector_create 的内置功能,我很容易找到圆圈,我确保背景为白色以便于识别。
在下图中,如我所料,发现了 3 个圆圈:
但出于某种奇怪的原因,当我在下图中应用相同的代码时,
无法识别这个完美的圆。怎么会??
下面是我的短代码。
img = cv2.imread(filename='img1.png')
cv2.imshow(winname="Original", mat=img)
cv2.waitKey(0)
params = cv2.SimpleBlobDetector_Params()
# set Circularity filtering parameters:
params.filterByCircularity = True
# 1 being perfect circle, 0 the opposite
params.minCircularity = 0.8
# create a detector with parameters
detector = cv2.SimpleBlobDetector_create(parameters=params)
keypoints = detector.detect(img)
print("Number of circular Blobs: " + str(len(keypoints)))
感谢大家的帮助!
我在这里测试了你的代码并得到了相同的结果。但是添加
params.filterByArea = False
在 params.filterByCircularity = True
之前解决了这个问题。这有点奇怪,因为我希望 SimpleBlobDetector
中的所有其他属性默认以 False
开头。此外,更改后代码开始响应 4 个圆圈(这对我来说似乎是正确的)而不是以前的 3 个。
由于 openCV (4.2.0.34) 中 SimpleBlobDetector_create 的内置功能,我很容易找到圆圈,我确保背景为白色以便于识别。
在下图中,如我所料,发现了 3 个圆圈:
无法识别这个完美的圆。怎么会??
下面是我的短代码。
img = cv2.imread(filename='img1.png')
cv2.imshow(winname="Original", mat=img)
cv2.waitKey(0)
params = cv2.SimpleBlobDetector_Params()
# set Circularity filtering parameters:
params.filterByCircularity = True
# 1 being perfect circle, 0 the opposite
params.minCircularity = 0.8
# create a detector with parameters
detector = cv2.SimpleBlobDetector_create(parameters=params)
keypoints = detector.detect(img)
print("Number of circular Blobs: " + str(len(keypoints)))
感谢大家的帮助!
我在这里测试了你的代码并得到了相同的结果。但是添加
params.filterByArea = False
在 params.filterByCircularity = True
之前解决了这个问题。这有点奇怪,因为我希望 SimpleBlobDetector
中的所有其他属性默认以 False
开头。此外,更改后代码开始响应 4 个圆圈(这对我来说似乎是正确的)而不是以前的 3 个。