gpt4 book ai didi

python - 如何删除由形态学引起的 Blob 扩展

转载 作者:太空狗 更新时间:2023-10-29 20:49:23 27 4
gpt4 key购买 nike

我有一个像这样腐 eclipse 和膨胀的图像:

kernel = np.ones((5,5),np.float32)/1
eroded_img = cv2.erode(self.inpainted_adjusted_image, kernel, iterations=10)
dilated_img = cv2.dilate(eroded_img, kernel, iterations=10)

这是腐 eclipse 和膨胀的结果:

enter image description here

然后我像这样设定一个阈值:

self.thresh = cv2.threshold(dilated_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

但是阈值给了我一个我在下图中标记的不需要的扩展(红线上方的区域是不需要的区域):

enter image description here

如何摆脱这个不需要的区域?有没有更好的方法来完成我正在做的事情?

最佳答案

使用不同类型的阈值(自适应阈值,将局部亮度考虑在内)已经可以解决您的问题:自适应阈值结果就是您要寻找的结果。

enter image description here

[编辑:我冒昧地在霍夫圆上添加了一些代码。我承认我已经为这张单张图片调整了参数以获得漂亮的结果,尽管我不知道您需要哪种类型的精度来解决此类问题]

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('image.png',0)
thresh = cv2.threshold(img, 210, 255, cv2.ADAPTIVE_THRESH_MEAN_C)[1]
canny = cv2.Canny(thresh,50,150)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(canny,cv2.HOUGH_GRADIENT,1,20, param1=50,param2=23,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))


for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(255,0,0),3)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

titles = ['Original Image', 'Adaptive Thresholding', "Canny", "Hough Circle"]
images = [img, thresh, canny, cimg]
for i in xrange(4):
plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()

如果这还不够,请告诉我们。

关于python - 如何删除由形态学引起的 Blob 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800444/

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