使用OpenCV计算网格上的对象

时间:2011-05-11 18:54:58

标签: c++ opencv

我对OpenCV比较陌生,我正在开发一个需要计算网格上对象数量的项目。网格是图像的背景,每个空间中都有一个对象,或者没有;我需要计算出现的数字,我真的不知道从哪里开始。我在这里和其他地方搜索过,但似乎无法找到我正在寻找的东西。我将来需要跟踪网格的空间编号,因此我最终还需要知道每个网格空间是占用还是空。我不是要求一个编码示例,但有没有人知道完成此任务的任何源或教程或类似的任务?谢谢你的帮助!

更多细节:图像将来自稳定安装的相机,物体形状相对均匀,但尺寸和颜色各异。

1 个答案:

答案 0 :(得分:1)

我首先回答几个问题:

  1. 对象是否完全封闭在网格单元格中?或者它可以放在网格线的顶部? (换句话说,对象是否会隐藏相机中的一条线?)
  2. 一个单元格中是否有多个对象?
  3. 一个物体可以占据多个细胞吗? (与问题1密切相关)
  4. 考虑到这些问题的合理答案,我认为问题可分为两部分:首先,确定每个网格空间的中心。要计算对象,您可以对该区域进行采样,以查看是否存在“非背景”。

    然后,您可以假设网格空间由四个强大的,经常放置的角落特征定义。 (为了便于讨论,我假设您已经根据需要执行了初始图像准备:直方图均衡,降噪等高斯模糊等)从那里,您可以尝试一些OpenCV的方法来寻找角落(Harris角落)探测器,cvGoodFeaturesToTrack等)。您可以借用OpenCV的方形查找示例(samples / c / square.c)中的一些技术。对于这项任务,假设网格中心只是每组“相邻”(或足够近)角的质心就足够了。

    或者,您可以使用Hough变换来识别图像中的主要水平和垂直线。然后,您可以确定交叉点以标识每个网格单元的范围。这种实现可能更具挑战性,因为从“附近”顶点推断结构(或邻接)以便找到网格中心似乎更加困难。