1

我正在尝试使用 Python OpenCVcv2.dilate()函数来弥补图像中的一些空白。请参阅下面的图片。

(1)原始图像的间隙要被封闭。

在此处输入图像描述

(2)迭代次数=10的扩张图像

在此处输入图像描述

(3)迭代次数=100的扩张图像和应该关闭的假设间隙。

在此处输入图像描述

为什么要dilate()保留这些空白?我错过了一些配置吗?

cv2.dilate(thresh, (3,3), iterations=dilate_interations)
4

1 回答 1

1

您必须调整内核大小,使其在图像的所有部分中至少包含一个非零元素。

这是来自OpenCV 文档

如果内核下至少有一个像素为“1”,则像素元素为“1”</p>

这意味着如果您的内核太小,您的图像中可能会有一些间隙,这些间隙在任何给定方向上都比内核的大小更宽。请注意,我使用 numpy 生成了内核(我认为您在指定内核时犯了一个错误)。我用 (5,5) 的内核(而不是 (3,3) )测试了您的代码,经过几次迭代,它填补了图像中的所有空白。您指定的(3,3)被视为大小为 (1,2) 的内核,而不是 3x3 内核:

import numpy as np

kernel = np.ones((5,5),np.uint8)

cv2.dilate(myImage,kernel,iterations = 5)
于 2019-04-30T13:47:50.620 回答