我有一个由不同对象组成的视频,如方形,矩形,三角形。我不知何故需要检测并只显示方形物体。所以在每个框架中,如果有一个正方形,它很好,但如果有一个三角形或矩形,那么它应该显示它。我正在使用背景减法,我能够检测所有三个对象并在它们周围创建一个边界框。但我无法弄清楚如何只显示方形物体。
答案 0 :(得分:3)
您可以使用以下算法:
- 执行背景减法,正如您当前所做的那样
- 在轮廓中关闭前景(使用findContours(,,,)然后使用drawContours(,,,)函数)
-clclose在边界框中获得轮廓(使用boundingRect(,,,)函数)
- 如果边界框的面积大约等于封闭轮廓的面积,则形状为正方形或矩形,而不是三角形。 (包围三角形的框的大部分将位于三角形之外)
- 如果boundingBox高度大约等于其宽度,那么它是一个正方形。 (通过Rect.height和Rect.width访问高度和宽度)
答案 1 :(得分:1)
您的物品如何填充或只是一个轮廓? 在任何一种情况下,我将采用的方法是通过找到最大梯度或仅通过边界框来检测顶点。顶点将位于边界框上。一旦有了顶点,就可以通过找到连续顶点之间的距离来说明对象是方形还是矩形。