如何使用 Python 检测视频 opencv 中的对象?

How to detect objects in a video opencv with Python?

我有一个由不同对象组成的视频,例如正方形、矩形、三角形。我不知何故只需要检测和显示方形物体。所以在每一帧中,如果有一个正方形,那很好,但如果有一个三角形或矩形,那么它应该显示它。我正在使用背景减法,我能够检测到所有三个对象并在它们周围创建一个边界框。但是我不知道如何只显示方形对象。

您的对象是如何填充的还是只是一个轮廓? 在任何一种情况下,我将采用的方法是通过找到最大梯度或仅通过边界框来检测顶点。顶点将位于边界框上。一旦你有了顶点,你可以通过找到连续顶点之间的距离来判断对象是正方形还是矩形。

您可以使用以下算法:

-执行背景减法,正如您目前所做的那样

-在轮廓中包围前景(使用 findContours(,) 然后 drawContours(,) 函数)

-将获得的轮廓包围在边界框中(使用 boundingRect(,) 函数)

-如果边界框的面积约等于封闭轮廓的面积,则形状为正方形或矩形,而不是三角形。 (包围三角形的框的很大一部分将位于三角形之外)

-如果boundingBox的高度大约等于它的宽度,那么它就是一个正方形。 (通过 Rect.height 和 Rect.width 访问高度和宽度)