python - 使用 Python 和 OpenCV 的通用填充形状

标签 python numpy opencv image-processing fill

我想知道图像中某些形状的面积(“白色”像素的数量)。

经过一些图像处理后,我得到了这样的二进制图像: enter image description here

并且想要用白色“填充”空白形状,然后计算白色像素以了解形状的面积。

为此,我使用以下代码:

# Filling shapes
kernel = np.ones((1000, 500), np.uint8)
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=1)

这给了我预期的图像: enter image description here

然后我计算白色像素并获取形状的面积(以像素为单位)。

我的问题是形状总是不同的,我不知道如何使我的代码更通用以填充任何其他形状 - 例如这个形状图像: enter image description here

使用相同的填充形状代码给我这个不想要的结果(在本例中为左侧): enter image description here

有什么想法我可以为更通用的填充内核(或其他东西......)做些什么吗?

非常感谢!

最佳答案

当轮廓闭合时,种子填充或多边形填充是标准方法。如果不是,与轮廓中断一样大的形态闭合会有所帮助。

您看到的“左侧”效果是由于膨胀到达左边缘所致。如果放大左侧的图像,就不会再产生这种情况(只要两个形状不接触)。

关于python - 使用 Python 和 OpenCV 的通用填充形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74879160/

相关文章:

numpy - NV12转YUV444加速

python - 使用 Swig 将使用 OpenCV 的 C 函数绑定(bind)到 python

c++ - 在 C++ 中使用 JSON 序列化 OpenCv Mat

python - 在python opencv中写入和/或读取后的图像像素值

Python 猴子补丁 Shutil

pandas - 如何显示第 n 行和最后一行

python - 如何在小于 numpy 数组维度的 bool 数组子集上索引 numpy 数组?

c++ - 与 libstdc++-6.dll 相关的 OpenCV 应用程序崩溃

python - 如何使用名为 `async` 的现有模块升级到 Python 3.7 ?

python - `ValueError: cannot reindex from a duplicate axis` 是什么意思?