python - 使用 OpenCV 进行 Blob 检测

标签 python opencv

我正在尝试使用 OpenCV 进行一些白色 Blob 检测。但是我的脚本在检测到一些小 Blob 时未能检测到我的目标是大白 block 。我是 OpenCV 的新手,在 OpenCV 中使用 simpleblobdetection 时我做错了吗? [部分解决,请阅读下文]

这是脚本:

#!/usr/bin/python

# Standard imports
import cv2
import numpy as np;

from matplotlib import pyplot as plt

# Read image
im = cv2.imread('whiteborder.jpg', cv2.IMREAD_GRAYSCALE)
imfiltered = cv2.inRange(im,255,255)

#OPENING
kernel = np.ones((5,5))

opening = cv2.morphologyEx(imfiltered,cv2.MORPH_OPEN,kernel)

#write out the filtered image

cv2.imwrite('colorfiltered.jpg',opening)


# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()

params.blobColor= 255
params.filterByColor = True


# Create a detector with the parameters
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :
    detector = cv2.SimpleBlobDetector(params)
else : 
    detector = cv2.SimpleBlobDetector_create(params)


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

# Draw detected blobs as green circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures
# the size of the circle corresponds to the size of blob

print str(keypoints)

im_with_keypoints = cv2.drawKeypoints(opening, keypoints, np.array([]), (0,255,0), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# Show blobs
##cv2.imshow("Keypoints", im_with_keypoints)

cv2.imwrite('Keypoints.jpg',im_with_keypoints)

cv2.waitKey(0)

编辑 :

通过添加更大的面积最大值,我能够识别出一个大 Blob ,但我的最终目标是识别是否存在大的白色矩形。我所做的白色 Blob 检测不仅返回矩形,还返回周围区域。 [这部分解决了]

编辑 2:

根据@PSchn 的回答,我更新了我的代码以应用逻辑,首先将滤色器设置为仅获取白色像素,然后使用打开去除噪声点。它适用于样本数据,我可以在 Blob 检测后成功获得关键点。
enter image description here

最佳答案

如果您只想检测白色矩形,您可以尝试设置更高的阈值,例如253、用开口擦掉小物体,取最大的一团。我首先平滑您的图像,然后对其进行阈值处理:

enter image description here

和开幕式:

enter image description here

现在你只需要使用 findContours并采取boundingRect .如果你的矩形总是那么白,它应该可以工作。如果您的阈值低于 251,则会出现其他小 Blob ,并且您的区域与它们合并,如下所示:

enter image description here

然后你仍然可以打开几次,你会得到这个:
enter image description here

但我不认为这是最快的想法;)

关于python - 使用 OpenCV 进行 Blob 检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39457209/

相关文章:

python - Jupyter Notebook 使用 "run all"时单元格的执行顺序

c++ - 卡尔曼滤波器 - 空预测点

android - Android NDK路径变量

c++ - 加载 OpenEXR 单 channel 深度图图像

python:仅当字符在此列表中时才保留字符

python - 在字典中使用整数类型键的字符串格式在 Python 2 中返回 KeyError,适用于字符串类型键

python - R 的 which() 和 which.min() 在 Python 中等价

Python Pandas 过滤零单元格

opencv - 为什么OpenCV VideoWriter仅支持8位深度图像?

python - OpenCV - undefined symbol : hb_font_funcs_set_variation_glyph_func