OpenCV dilate() 函数没有缩小所有方向的间隙
OpenCV dilate() function not closing the gaps in all directions
我正在尝试使用 Python OpenCV cv2.dilate()
函数来缩小图像中的一些空白。见下图。
(1)原始图像,间隙要被关闭。
(2) 膨胀图像 iterations=10
(3) 膨胀图像 iterations=100 和应该关闭的假定间隙。
为什么 dilate()
保持这些差距?我是否缺少某些配置?
cv2.dilate(thresh, (3,3), iterations=dilate_interations)
您必须调整内核大小,使其在图像的所有部分至少包含一个非零元素。
这是来自 OpenCV documentation:
a pixel element is ‘1’ if at least one pixel under the kernel is ‘1’
这意味着如果您的内核太小,您的图像中可能会出现一些间隙,这些间隙在任何给定方向上都比内核的大小宽。请注意,我使用 numpy 生成了内核(我认为您在指定内核时犯了一个错误)。我用 (5,5) 的内核(而不是 (3,3) )测试了您的代码,经过几次迭代后,它关闭了图像中的所有间隙。您指定的 (3,3)
被视为大小为 (1,2) 的内核,而不是大小为 1 的 3x3 内核:
import numpy as np
kernel = np.ones((5,5),np.uint8)
cv2.dilate(myImage,kernel,iterations = 5)
我正在尝试使用 Python OpenCV cv2.dilate()
函数来缩小图像中的一些空白。见下图。
(1)原始图像,间隙要被关闭。
(2) 膨胀图像 iterations=10
(3) 膨胀图像 iterations=100 和应该关闭的假定间隙。
为什么 dilate()
保持这些差距?我是否缺少某些配置?
cv2.dilate(thresh, (3,3), iterations=dilate_interations)
您必须调整内核大小,使其在图像的所有部分至少包含一个非零元素。
这是来自 OpenCV documentation:
a pixel element is ‘1’ if at least one pixel under the kernel is ‘1’
这意味着如果您的内核太小,您的图像中可能会出现一些间隙,这些间隙在任何给定方向上都比内核的大小宽。请注意,我使用 numpy 生成了内核(我认为您在指定内核时犯了一个错误)。我用 (5,5) 的内核(而不是 (3,3) )测试了您的代码,经过几次迭代后,它关闭了图像中的所有间隙。您指定的 (3,3)
被视为大小为 (1,2) 的内核,而不是大小为 1 的 3x3 内核:
import numpy as np
kernel = np.ones((5,5),np.uint8)
cv2.dilate(myImage,kernel,iterations = 5)