【发布时间】:2017-05-18 23:14:42
【问题描述】:
我正在尝试检测某些图像中定义明确的斑点,我可以轻松地将图像阈值设置为仅具有我想要检测的白点,但斑点检测器似乎将其中一些组合在一起或错过了其他斑点。有一个更好的方法吗?有什么方法可以找到每个连接的白色像素岛,而且速度不是很慢吗?
阈值图像:
检测到的斑点:
用于将阈值处理成 blob 的代码:
import numpy as np
import cv2
params = cv2.SimpleBlobDetector_Params()
# we are looking for white blobs in a mask
params.blobColor = 255
params.filterByColor = True
params.filterByArea = True
params.minArea = 0
# Blobs larger than 50 pixels are noise
params.maxArea = 50
# enabling these can cause us to miss points
params.filterByCircularity = False
params.filterByConvexity = False
params.filterByInertia = False
detector = cv2.SimpleBlobDetector_create(params)
img = cv2.imread('Threshold Out.png', flags=cv2.IMREAD_GRAYSCALE)
keypoints = detector.detect(img)
img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
img = cv2.drawKeypoints(img, keypoints, np.array([]), (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
while True:
cv2.imshow('out', img)
key = cv2.waitKey(0)
if key == 27:
break
【问题讨论】:
-
要调试它,我会在
cvtColor()之后再次尝试阈值化或计算颜色,以确保所有像素确实为 0 或 255。 -
@MarkSetchell 您会注意到我在将检测器转换为 RGB 之前应用了检测器,以避免此类问题
-
哎呀,是的。也许早点检查一行,以防阅读已经完成。
-
我实际上遇到了你描述的问题,在这之前我发现了 cv2.IMREAD_GRAYSCALE 标志
-
我不会说 Python,但在
imread中应该说flags=吗?
标签: python-2.7 opencv