我正在使用OpenCV 2.4.9在圆形物体的相机图像上运行斑点检测。我在图像上运行了许多标准滤镜(模糊,自适应阈值,使用skimage例程的骨架化和骨架的扩张),并且想要在结果上识别斑点(连续的黑色区域)。有一个SimpleBlobDetector只是为了这个,但是我设置了它的参数,它没有做我想做的事。
关键点似乎不尊重区域限制,也不会出现在我期望的位置。
脚本如下所示,是否有明显的错误?还是其他任何建议?
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(Analyze Particles,圆度0.5-1.0,面积500-5000 px ^ 2)的类似管道,我试图使用OpenCV重现,它给出了这样的结果: