计算检测到的对象OPENCV
Compute Detected objects OPENCV
我正在为使用haar级联的计算人员创建一个程序。检测不会在一帧中给我所有的人,但在下一帧中,我检测到在前一帧中没有检测到的对象。
例如:在一个视频中,我有几个人在帧1中,我检测到人A和B在帧2中,我检测到人A和C
有没有根据的两帧来获得真实的人数
我用过这个功能,但不可靠
bool isInside(Rect rectangle, Point point)
{
if (point.x > rectangle.x && point.x<rectangle.x + rectangle.width && point.y>rectangle.y && point.y < rectangle.y + rectangle.height)
return true;
}
vector<Point> getNouvellesDetections(vector<Rect> rectangles, vector<Point> anciennePoints)
{
vector<Point> nouvellePoints = anciennePoints;
for (int i = 0; i < rectangles.size(); i++)
{
bool isNouveau = true;
for (int j = 0; j < anciennePoints.size(); j++)
{
if (isInside(rectangles[i], anciennePoints[j]))
{
isNouveau = false;
anciennePoints[j].x = getCenterX(rectangles[i]);
anciennePoints[j].y = getCenterY(rectangles[i]);
break;
}
}
if (isNouveau)
{
Point point;
point.x = getCenterX(rectangles[i]);
point.y = getCenterY(rectangles[i]);
nouvellePoints.push_back(point);
}
}
return nouvellePoints;
}
您提供的代码并不能深入了解您的检测方法等。
您是否考虑过跟踪检测到的物体?如果没有某种跟踪,很难确定哪些检测是新的,哪些是重新检测。
哈尔分类器不是魔术,它是非常近似的。
例如,您可以使用Haar检测对象,并创建一个"个人跟踪器"来跟踪它们的速度(运动),并测试在n+1帧中检测到的对象(如果它们可能是同一个人)。然后,在n次跟踪检测后,你可以将该对象归类为"人",而不是假阳性,在n个未检测后,"忘记"该对象或将其标记为丢失。
一种跟踪方法是在检测到的兴趣区域(Haar矩形)上使用光流,并试图确定人的运动。这很简单,但可能会被证明是有效的。。当然,还有更复杂、更准确的追踪方法。
如果你的相机是静止的,这不是很难,否则会变得复杂。重叠的人也很棘手。
您可以使用的方法取决于此工具的应用程序。如果你想要实时跟踪,有些选项是不可用的,例如在后处理中,你可以反向跟踪帧,并在确定它们不是真实检测后过滤掉假阳性。
相关文章:
- 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 上的数学运算