python - 在 OpenCV 中检测二进制 blob

标签 python opencv

我的图像中有一些彩色矩形,我通过 HSV 阈值处理成功识别了这些矩形。结果如下: mask image

现在我想将大 Blob 检测为一个点。我尝试使用 cv2.SimpleBlobDetector() 和自定义参数:

import cv2
import numpy as np

mask = cv2.imread('mask.png')
original = cv2.imread('original.png')
params = cv2.SimpleBlobDetector_Params()
# thresholds
params.minThreshold = 10
params.maxThreshold = 200
#params.thresholdStep = 20

# filter by area
params.filterByArea = True
params.minArea = 1
params.maxArea = 10000

# filter by circularity
params.filterByCircularity = False

# filter by convexity
params.filterByConvexity = False

# filter by inertia
params.filterByInertia = False

detector = cv2.SimpleBlobDetector(params)

keypoints = detector.detect(mask)
img_keypoints = cv2.drawKeypoints(original, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('keypoints.png', img_keypoints)

这就是结果和原始图片的样子: keypoints and original

我希望红点位于绿点的中心。

我该如何解决这个问题?非常感谢您的帮助。

编辑:我忘了提及:因为我已经有一个二进制图像作为输入,所以真的有必要在 cv2.SimpleBlobDetector() 中生成多个二进制图像吗?将值更改为以下内容是否可以:

params.minThreshold = 127
params.maxThreshold = 127

通过生成二进制图像来减少不必要的CPU使用?

EDIT2:请注意,我使用的是 OpenCV 2,而不是 3

谢谢。

最佳答案

当使用cv2.SimpleBlobDetector()时,它会查找颜色较深的 Blob 。在您的情况下,mask 中的矩形为白色,而图像的其余部分为黑色。因此,它无法找到自定义参数集的任何 blob。

我刚刚对现有代码做了一些更改:

  1. 将蒙版读取为灰度图像而不是彩色图像:

mask = cv2.imread('mask.png', 0)

  • mask转换为二进制图像,其中矩形以黑色突出显示:
  • ret, mask = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY_INV)

    从这里开始使用您的代码给出了您预期的以下结果。

    结果:

    enter image description here

    关于python - 在 OpenCV 中检测二进制 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588175/

    相关文章:

    python - 如果存在另一个参数,如何禁用一个参数?

    python - 制作一个 wxPython 应用程序多语言

    c++ - OpenCV 如何确定具有不同参数的函数的 python 绑定(bind)?

    python-3.x - 打开简历比较两个脸部嵌入

    python - 我正在使用 OpenCV 制作蒙面人脸检测应用程序,以检测戴口罩的人脸,但出现错误

    python - 具有 REQ 和 REP 套接字的 C++ ZeroMQ 单一应用程序

    python - float 和 numpy.float64 上的 Python 回合的不同回合行为

    python - 从带有字符的图像中删除背景(鬼照片)?

    opencv - VS2013 + Win7 中缺少 MSVCP140.dll

    python - 使用 OpenCV 进行视频处理