在分析图像以查找具有运动的区域的情况下,这是我作为中间结果使用opencv和python(假定它们是100%二进制的)的结果:
所以我的问题是:有没有办法找到具有特定“厚度”阈值的白色斑点?
大致如下:
我一直在寻找转换和操作,例如连接的组件和形态转换,但是这些都行不通,我不知道该从哪里开始。
答案 0 :(得分:3)
形态学上的开口是解决此问题的理想选择。它会去除所有比给定直径薄的白色部分。
在OpenCV中,它是使用op=cv2.MORPH_OPEN
在cv2.morphologyEx
中实现的:
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版本。