gpt4 book ai didi

python - 在 python 中设置 blob 检测参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:31 24 4
gpt4 key购买 nike

我正在使用 OpenCV 2.4.9 对圆形物体的相机图像运行 Blob 检测。我在图像上运行了许多标准过滤器(模糊、自适应阈值、使用 skimage 例程的骨架化和骨架的膨胀),并希望在结果上识别 Blob (连续的黑色区域)。 SimpleBlobDetector 就是为此而设计的,但是无论我如何设置它的参数,它都没有按照我的意愿进行。

这是原图: caputred image

这是处理后的版本,检测器的关键点以黄色绘制: skeletonization

关键点似乎不受区域限制,也没有出现在我期望的位置。

脚本如下所示,是否有明显错误?或者还有其他建议吗?

import numpy as np
import cv2
import skimage, skimage.morphology

img0=cv2.imread('capture_b_07.cropped.png')
img1=cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)
img2=cv2.medianBlur(img1,5)
img3=cv2.bilateralFilter(img2,9,75,75)
img4=cv2.adaptiveThreshold(img3,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,21,0)
img5=skimage.img_as_ubyte(skimage.morphology.skeletonize(skimage.img_as_bool(img4)))
img6=cv2.dilate(img5,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations=1)
# blob detection
pp=cv2.SimpleBlobDetector_Params()
pp.filterByColor=True
pp.blobColor=0
pp.filterByArea=True
pp.minArea=500
pp.maxArea=5000
pp.filterByCircularity=True
pp.minCircularity=.4
pp.maxCircularity=1.

det=cv2.SimpleBlobDetector(pp)
keypts=det.detect(img6)
img7=cv2.drawKeypoints(img6,keypts,np.array([]),(0,255,255),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('capture_b_07.blobs.png',img7)

来自 ImageJ 的类似管道(分析粒子,圆度 0.5-1.0,面积 500-5000 px^2),我正在尝试使用 OpenCV 重现,给出如下内容:

imagej blobs

最佳答案

您可以使用分水岭获得与 ImageJ 类似的结果。我把你的img6倒过来,贴上标签,然后用它作为opencv watershed的标记。然后,我使用形态过滤器扩大了分水岭分割边界线,并使用 opencv findContours 找到了连通分量。以下是结果。不确定这是否是您想要的。我没有发布代码,因为我结合 pythonc++ 快速尝试了这个代码,所以它有点乱。

分水岭分割

ws

连接组件 cc

关于python - 在 python 中设置 blob 检测参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com