使用 OpenCV 对网格上的对象进行计数
Counting objects on a grid with OpenCV
我对OpenCV比较陌生,我正在做一个项目,我需要计算网格上的对象数量。 网格是图像的背景,每个空间中要么有一个对象,要么没有;我需要数一数在场的数字,我真的不知道从哪里开始。我在这里和其他地方搜索过,但似乎找不到我要找的东西。将来我需要跟踪网格的空间编号,因此我最终还需要知道每个网格空间是被占用还是为空。我不会要求一个编码示例,但是有没有人知道任何来源或教程来完成此任务或类似的任务?感谢您的帮助!
更多细节:图像将来自稳定安装的相机,物体的形状相对均匀,但大小和颜色不同。
我首先要回答几个问题:
- 对象是否会完全封闭在网格单元中?或者它可以放在网格线的顶部吗?(换句话说,对象会从相机中隐藏一条线吗?
- 一个单元格中会有多个对象吗?
- 一个对象可以占用多个单元格吗?(与问题1密切相关)
如果这些问题得到合理的答案,我认为问题可以分为两部分:首先,确定每个网格空间的中心。 要对对象进行计数,然后可以对该区域进行采样,以查看是否存在任何"非背景"的内容。
然后,您可以假设格网空间由四个强大的、规则放置的拐角要素定义。 (为了便于讨论,我假设您已经根据需要执行了初始图像准备:直方图均衡、用于降噪的高斯模糊等。 从那里,你可以尝试OpenCV的一些方法来查找角落(Harris角落检测器,cvGoodFeaturesToTrack等)。 你可以借用OpenCV的平方查找示例(samples/c/square.c)中的一些技术。 对于此任务,假设网格中心只是每组"相邻"(或足够近)角的质心可能就足够了。
或者,您可以使用 Hough 变换来标识图像中的主要水平线和垂直线。然后,您可以确定交点以标识每个格网像元的范围。 这种实现可能更具挑战性,因为从"附近"顶点推断结构(或邻接)以找到网格中心似乎更困难。
相关文章:
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- openCV C++将对象/斑点简化为质心
- Opencv,在图像中的对象周围绘制一个框
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 将 OpenCV 帧另存为对象
- 如何将图像缓冲区传递到OpenCV垫子对象
- 与 Python 共享 OpenCV C++ 对象
- OPENCV SVM-对象不属于任何受过训练的类
- 如何使用OpenCV从图像中检测旋转对象
- C++中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
- OpenCV 检测多个旋转的缩放对象
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- OPENCV从Yuyv Pixelformat视频框架创建YUV420或灰度垫子对象
- OpenCV程序的输出在未检测到文本对象时不给出0
- OPENCV(C ) - 从已知的3D对象和相机位置计算图像的2D坐标
- 将数组分配给OPENCV C 中的初始化垫子对象
- OpenCV Mat对象复制速度更快
- OpenCV-C++中Mat对象的平均值
- 计算检测到的对象OPENCV
- 垫子对象 OpenCv 上的数学运算