我正在尝试根据视频源的形状特征(例如:面积、轮廓长度等)在视频源中执行暗(几乎是黑色)对象检测,但我在检测二进制掩码中的轮廓时遇到问题。
有时即使对象没有改变形状并且轮廓是从仅包含一个紧凑 blob 的简单蒙版派生的,轮廓也没有关闭(我可以看出,因为我使用 CV_FILLED 选项显示它,并且对于许多帧轮廓已填充),并且由于该计算区域实际上不可信(值降低到几个像素)。
我还注意到,当对象的轮廓未闭合时,长度大约是预期的 2 倍(这是有道理的)。
为什么简单斑点的轮廓有时会打开有时会关闭,我如何强制它们始终关闭?我已经尝试过凸包,并将轮廓的第一个点复制到它的末端,但它没有用。
我的方法的步骤如下:
- 将图像转换为灰度
- 执行阈值化、腐蚀和膨胀以消除噪声并改善“形状”
- 使用 Canny 边缘检测器只得到边缘
- 使用 findContours 获取等高线及其区域:
- 使用 arcLength 计算等高线和其他特征的长度。