C++ 在opencv中绘制多个移动对象的轨迹

C++ 在opencv中绘制多个移动对象的轨迹,c++,opencv,path,C++,Opencv,Path,我目前正在做我最后一年的项目。目标是使用轨迹分析检测停车场环境中的正常事件,例如一个人在停车场行走。我已经完成了背景减法和斑点检测。我想通过使用边界框质心的坐标来绘制移动对象的轨迹,例如:人、车等。是否有用于执行此操作的预定义函数?任何帮助都将不胜感激。提前谢谢 假设您拥有X和Y像素坐标,则始终可以使用opencv的基本图形库绘制一条沿着对象所走路径的线。下面是一个例子 int iLastX = -1; int iLastY = -1; Mat imgLines =

我目前正在做我最后一年的项目。目标是使用轨迹分析检测停车场环境中的正常事件,例如一个人在停车场行走。我已经完成了背景减法和斑点检测。我想通过使用边界框质心的坐标来绘制移动对象的轨迹,例如:人、车等。是否有用于执行此操作的预定义函数?任何帮助都将不胜感激。提前谢谢

假设您拥有X和Y像素坐标,则始终可以使用opencv的基本图形库绘制一条沿着对象所走路径的线。下面是一个例子

    int iLastX = -1; 
    int iLastY = -1;

     Mat imgLines = Mat::zeros( imgTmp.size(), CV_8UC3 );;

        while(true){

            Mat imgOriginal;

             if (iLastX >= 0 && iLastY >= 0 && posX >= 0 && posY >= 0)
               {
                //Draw a red line from the previous point to the current point
                line(imgLines, Point(posX, posY), Point(iLastX, iLastY), Scalar(0,0,255), 2);
               }

                iLastX = posX;
               iLastY = posY;

      imgOriginal = imgOriginal + imgLines;
      imshow("Original", imgOriginal); //show the original image
        }

您首先必须跟踪blob,因此必须确定哪个blob与上一帧中的相同。有简单/有限的方法可以做到这一点,也有更复杂/强大的方法可以做到这一点。绘制跟踪轨迹很简单,就像埃尼回答的那样。我尝试实现上述逻辑,但无法绘制轨迹。仅当同一帧中有两个不同水滴的边界矩形时,它才会绘制一条线。帧更新后,线将消失。如何在水滴质心的当前位置和同一水滴先前位置的质心之间绘制一条线?一帧上有多个水滴。您如何决定跟踪哪个blob以及忽略哪个blob。根据代码感知,任何对blob位置的更新(在本例中为新blob)都将绘制在屏幕上。这将导致第一个blob被视为原始位置,第二个blob被视为新位置。请仅用一个blob来尝试,并提供反馈。此外,如果您想同时绘制多个blob的方向,则需要对代码进行更改,以帮助识别哪个blob是哪个blob。因此,每帧后线条消失的原因可能是因为您的实现我编辑了代码以提供更清晰的解决方案。你也可以查看这里使用的代码的链接:-我遵循了教程,它成功了。非常感谢埃尼没有问题,如果您通过单击答案旁边的“接受”按钮接受此答案作为正确的解决方案,将不胜感激: