【问题标题】:Compute Detected objects OPENCV计算检测到的对象 OPENCV
【发布时间】:2016-10-06 17:20:46
【问题描述】:

我正在使用 haar cascade 创建一个计算人的程序。检测不会在一帧中给我所有人,但在下一帧中,我会检测到前一帧中未检测到的对象。

示例:在视频中我有一些人 在第 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;
}

【问题讨论】:

    标签: c++ opencv haar-classifier


    【解决方案1】:

    您提供的代码并不能深入了解您的检测方法等。

    您是否考虑过跟踪检测到的对象?如果没有某种跟踪,很难确定哪些检测是新的,哪些是重新检测。

    Haar 分类器并不神奇,它非常近似。

    例如,您可以使用 Haar 检测对象并创建一个“人跟踪器”来跟踪它们的速度(运动)并测试在 n+1 帧中检测到的对象是否可能是同一个人。然后在 n 次跟踪检测后,您可以将该对象分类为“人”而不是误报,并且在 n 次未检测后“忘记”该对象或将其标记为丢失。

    一种跟踪方法是在检测到的 AreaOfInterest(Haar 矩形)上使用光流,并尝试确定人员的移动。这很简单,但可能被证明是有效的。当然还有更复杂和更准确的跟踪方法。

    如果您的相机是静止的,这并不难,否则会变得复杂。重叠的人也很棘手。

    您可以使用的方法取决于此工具的应用。如果您想要实时跟踪,则某些选项不可用,例如在后期处理中,您可以回溯帧,并在确定它们不是真实检测后过滤掉误报。

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      相关资源
      最近更新 更多