使用 OpenCV 对网格上的对象进行计数

Counting objects on a grid with OpenCV

本文关键字:对象 OpenCV 网格 使用      更新时间:2023-10-16

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

更多细节:图像将来自稳定安装的相机,物体的形状相对均匀,但大小和颜色不同。

我首先要回答几个问题:

  1. 对象是否会完全封闭在网格单元中?或者它可以放在网格线的顶部吗?(换句话说,对象会从相机中隐藏一条线吗?
  2. 一个单元格中会有多个对象吗?
  3. 一个对象可以占用多个单元格吗?(与问题1密切相关)

如果这些问题得到合理的答案,我认为问题可以分为两部分:首先,确定每个网格空间的中心。 要对对象进行计数,然后可以对该区域进行采样,以查看是否存在任何"非背景"的内容。

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

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