Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算检测到的对象OPENCV_C++_Opencv_Haar Classifier - Fatal编程技术网

C++ 计算检测到的对象OPENCV

C++ 计算检测到的对象OPENCV,c++,opencv,haar-classifier,C++,Opencv,Haar Classifier,我正在使用haar cascade创建一个计算程序。检测不会在一帧中显示所有人,但在下一帧中,我会检测到前一帧中未检测到的对象 在一段视频中,我看到了三个人 在第1帧中,我检测到人A和B 在第2帧中,我检测到人A和C 根据这两个框架是否有任何方法可以得到真实的人数 我使用了这个功能,但不可靠 bool isInside(Rect rectangle, Point point) { if (point.x > rectangle.x && point.x<rec

我正在使用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;
}
bool-isInside(矩形、点)
{
if(point.x>rectangle.x&&point.xrectangle.y&&point.y
您提供的代码无法深入了解您的检测方法等

你考虑过跟踪检测到的物体吗?如果没有某种跟踪,很难确定哪些检测是新的,哪些是重新检测

Haar分类器不是魔术,它是非常近似的

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

跟踪的一种方法是在检测到的感兴趣区域(哈尔矩形)上使用光流,并尝试确定人的移动。这很简单,但可能被证明是有效的。。当然还有更复杂、更精确的跟踪方法

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

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