我正在使用OpenCV
编写一个C程序来检测一些用胶带制成的矩形,这些矩形在内部是空心的。问题是,每个物理矩形给出两个数字矩形:一个用于内周边,一个用于外周边。在所有情况下,外部矩形完全包围内部矩形。
我需要一些方法来删除内部矩形,并且以合理有效的方式,因为这是在视频源上运行,并且不能显着降低帧速率(大约15fps,在BeagleBoard xM
上,这是不是非常强大的。)
总有四个物理矩形,有四到八个数字矩形,具体取决于处理操作的清洁度。可靠地检测外部矩形;内部矩形不是。图像被阈值化,侵蚀和扩张,使得图像清洁并且检测通常是可靠的。
我觉得这个问题与OpenCV
是分开的,而且实际上只是处理矩形,可能会有一段时间我可以解决,但项目处于紧迫的截止日期,所以我也是这样做的提问。先谢谢你们。
答案 0 :(得分:2)
答案 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的常量对此可以正常工作)。比较前面计算的距离;应该从矩形列表中删除距离较短的矩形。