gpt4 book ai didi

python - 在opencv中填充轮廓

转载 作者:行者123 更新时间:2023-12-02 16:14:08 25 4
gpt4 key购买 nike

我正在尝试使用 openCV 中的 Canny 过滤器识别轮廓并填充轮廓,以创建蒙版。我有这种起始图像:
preprocessed image

我正在尝试识别图像中的所有特征,绘制轮廓并填充它们。我正在尝试在 openCV 中使用此代码来实现它:

img = cv2.imread(os.path.join(fName,f), 0)  
img = cv2.GaussianBlur(img,(5,5),0)
cv2.bilateralFilter(img, 9, 150,450)
edge = np.zeros((img.shape[0] + 2, img.shape[1] + 2), np.uint8)
edge = cv2.Canny(img, 500, 300, apertureSize=5)
cont, heir = cv2.findContours(edge.copy(), cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
contours = [cv2.approxPolyDP(cnt, 3, True) for cnt in cont]
cv2.morphologyEx(img, cv2.MORPH_CLOSE, np.ones((5,5), dtype='uint8'))
cv2.drawContours(img, contours, -1, 255, -1)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis

大多数情况下,我在猜测参数(反复试验;这很难!)。不幸的是,我得到的不是整齐的轮廓,而是用白色填充的: image with edges detected

有什么想法吗?显然,我需要更好地关闭边缘,并调整我的一些 Canny 参数,但我真的可以使用一些指导。

谢谢!

编辑:阈值不能很好地创建我想要的那种掩码: Binary Thresholding我认为我的“亮”点没有比背景足够亮,但我希望能够在黑色背景上有白点。

代码:
    img = cv2.imread(os.path.join(fName,f), 0)
cv2.bilateralFilter(img, 9, 90,16)
#img = cv2.GaussianBlur(img,(5,5),0)
#binImg = np.zeros((img.shape[0], img.shape[1]), np.uint8)
binImg = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 2)
#binImg = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
#newimg = np.multiply(img, np.divide(edge, 255.0))
plt.imshow(binImg, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
#plt.show()

最佳答案

“识别轮廓”和“识别所有特征”是什么意思?如果您只需要不需要的明亮图像部分的蒙版,请找到轮廓,然后为您展示的这种图像填充它们,只需使用任何类型的阈值,您将获得所需的二进制蒙版。

关于python - 在opencv中填充轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145806/

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