在二值图像上寻找厚目标

2024-03-28 13:50:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在分析图像以找到有运动的区域的上下文中,我得到了一个中间结果,使用opencv和python(假设它们是100%二进制的):

Binary image

所以我的问题是:有没有一种方法可以用一个特定的“厚度”阈值来定位白色斑点?你知道吗

大致可以这样看:

Resulting image

我一直在寻找变换和操作,如连接组件和形态变换,但这些都不起作用,我不太清楚从哪里开始,除此之外。你知道吗


Tags: 方法定位图像区域二进制组件阈值opencv
1条回答
网友
1楼 · 发布于 2024-03-28 13:50:25

形态学开口是解决这个问题的理想方法。它会移除所有比给定直径细的白色部分。你知道吗

在OpenCV中,它在^{}中使用op=cv2.MORPH_OPEN实现:

kernel = cv2.getStructuringElement(cv2.cv.MORPH_ELLIPSE, diameter)
output = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

但请注意,这会删除对象的薄部分,如果对象的一部分足够宽,则不会留下完整的对象。这可以通过重建来实现,先进行腐蚀,然后进行形态学重建(也称为测地扩张)。你知道吗

OpenCV没有这个算法。This Q&A对如何在OpenCV中实现它给出了一个粗略的概述,但是这是一个非常昂贵的算法,有更有效的算法。你知道吗

在Scikit映像中可能有一个实现,我还没有找到它。你知道吗

DIPlib(带有名为PyDIP的Python绑定)(我也是作者)有一个dip.OpeningByReconstruction,但是您必须从源代码构建库,因为我们还没有一个简单的Python预打包发行版。你知道吗

相关问题 更多 >