我试图在所附的图像中找到所有的圆形颗粒。这是我唯一的图像(及其反面)。
我已阅读this post,但无法将hsv值用于阈值设置。我尝试使用霍夫变换。
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, dp=0.01, minDist=0.1, param1=10, param2=5, minRadius=3,maxRadius=6)
并使用以下代码进行绘制names =[circles]
for nums in names:
color_img = cv2.imread(path)
blue = (211,211,211)
for x, y, r in nums[0]:
cv2.circle(color_img, (x,y), r, blue, 1)
plt.figure(figsize=(15,15))
plt.title("Hough")
plt.imshow(color_img, cmap='gray')
以下代码用于绘制蒙版:for masks in names:
black = np.zeros(img_gray.shape)
for x, y, r in masks[0]:
cv2.circle(black, (x,y), int(r), 255, -1) # -1 to draw filled circles
plt.imshow(black, gray)
然而,我只能得到以下面膜,如果相当差的话。这是什么被认为是粒子以及什么不是粒子的图像。
最佳答案
一种简单的方法包括稍微腐 eclipse 图像,以分离触摸的圆形对象,然后进行连接的分量分析并丢弃所有大于某个选定阈值的对象,最后将图像放大回去,以使圆形对象再次具有原始大小。我们可以在标记的图像上执行此膨胀,以便保留分离的对象。
我使用DIPlib是因为我最熟悉它(我是作者)。
import diplib as dip
a = dip.ImageRead('6O0Oe.png')
a = a(0) > 127 # the PNG is a color image, but OP's image is binary,
# so we binarize here to simulate OP's condition.
separation = 7 # tweak these two parameters as necessary
size_threshold = 500
b = dip.Erosion(a, dip.SE(separation))
b = dip.Label(b, maxSize=size_threshold)
b = dip.Dilation(b, dip.SE(separation))
请注意,此处使用的图像似乎是放大的屏幕抓图,而不是原始图像OP正在处理的图像。如果是这样,则必须使参数变小以识别较小图像中的较小对象。
关于python - 从阈值掩模生成圆形粒子的分割掩模?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62946356/