opencv simpleblobdetector - 获取已识别 blob 的 blob 属性

Pet*_*ter 8 python opencv

我正在使用来自 opencv 的 simpleblobdetector 和 python 来识别图像中的斑点。

我能够让简单的斑点检测器工作并为我提供已识别斑点的位置。但是我也可以获得已识别斑点的惯性/凸度/圆度/等属性吗?

img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)

# set up blob detector params
detector_params = cv2.SimpleBlobDetector_Params()
detector_params.filterByInertia = True
detector_params.minInertiaRatio = 0.001
detector_params.filterByArea = True
detector_params.maxArea = 10000000
detector_params.minArea = 1000
detector_params.filterByCircularity = True
detector_params.minCircularity = 0.0001
detector_params.filterByConvexity = True
detector_params.minConvexity = 0.01

detector = cv2.SimpleBlobDetector_create(detector_params)

# Detect blobs.
keypoints = detector.detect(img)

# print properties of identified blobs
for p in keypoints:
    print(p.pt) # locations of blobs
    # circularity???
    # inertia???
    # area???
    # convexity???
    # etc...
Run Code Online (Sandbox Code Playgroud)

谢谢

Sol*_*.gy 2

根据opencv.org,检测器返回的关键点不包含有关找到它们的算法的任何信息:

cv::KeyPoint:显着点检测器的数据结构。

类实例存储一个关键点,即由许多可用关键点检测器之一找到的点特征,例如 Harris 角点检测器、cv::FAST、cv::StarDetector、cv::SURF、cv::SIFT、cv::LDetector ETC。

关键点由二维位置、尺度(与需要考虑的邻域直径成正比)、方向和一些其他参数来表征。

您可以绘制关键点,显示大小和旋转:

img = cv2.drawKeypoints(img, keypoints, None, color=(0,255,0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Run Code Online (Sandbox Code Playgroud)

  • 太糟糕了,这对参数化很有帮助。 (3认同)
  • 我仍然无法理解这一切。对于某些情况,仅检测一个斑点及其位置可能就足够了,但在许多其他情况下,诸如尺寸之类的东西(在我的例子中,我使用探测器来检测膜中的孔并计算每个孔的直径)将非常有帮助。 (3认同)