消除OpenCV中其他矩形内的矩形

时间:2012-02-02 02:12:22

标签: c image-processing opencv computer-vision

我正在使用OpenCV编写一个C程序来检测一些用胶带制成的矩形,这些矩形在内部是空心的。问题是,每个物理矩形给出两个数字矩形:一个用于内周边,一个用于外周边。在所有情况下,外部矩形完全包围内部矩形。

我需要一些方法来删除内部矩形,并且以合理有效的方式,因为这是在视频源上运行,并且不能显着降低帧速率(大约15fps,在BeagleBoard xM上,这是不是非常强大的。)

总有四个物理矩形,有四到八个数字矩形,具体取决于处理操作的清洁度。可靠地检测外部矩形;内部矩形不是。图像被阈值化,侵蚀和扩张,使得图像清洁并且检测通常是可靠的。

我觉得这个问题与OpenCV是分开的,而且实际上只是处理矩形,可能会有一段时间我可以解决,但项目处于紧迫的截止日期,所以我也是这样做的提问。先谢谢你们。

3 个答案:

答案 0 :(得分:2)

在opencv中有一个名为grouprectangle的函数。

该功能可以删除多个矩形......

有一个快乐的编码。

答案 1 :(得分:1)

由于你最多只有8个数字矩形,我认为使用自然的强力算法来确定哪些矩形在其他矩形内是可以的。当N很小时,做O(N ^ 2)算法是可以的,8很小。

这是伪代码:

for each rectangle i {
  for each rectangle j {
    if i != j and rectangle i is inside rectangle j {
      disregard rectangle i
    }
  }
}

答案 2 :(得分:1)

解决 - 快速的解决方案是从矩形的中心点到一个角的距离,并比较中心非常靠近的矩形之间的距离。距离较短的那个必须是内部矩形。

代码方面你想要计算中心,然后找到右下角,这只是min x和min y的点。计算它们之间的距离并以某种方式存储它。对于每个矩形,迭代其他矩形并检查它们的中心是否非常接近(在我的情况下,〜30px的常量对此可以正常工作)。比较前面计算的距离;应该从矩形列表中删除距离较短的矩形。