【问题标题】:plot trajectory of multiple moving objects in opencv在opencv中绘制多个运动物体的轨迹
【发布时间】:2015-02-23 10:45:21
【问题描述】:

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

【问题讨论】:

  • 您首先必须跟踪 blob,因此您必须确定哪个 blob 与最后一帧中的相同。有简单/有限的方法可以做到这一点,也有更复杂/强大的方法来做到这一点。绘制跟踪轨迹很简单,就像 Eni 回答的那样。

标签: c++ opencv path


【解决方案1】:

假设你有 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 是哪个
  • 另外,每帧后线条消失的原因可能是因为您的实现我已经编辑了代码以提供更清晰的解决方案。您还可以查看链接是否在此处使用了代码:- opencv-srf.blogspot.co.uk/2010/09/…
  • 我按照教程进行操作,效果很好。非常感谢埃尼。 :)
  • 没有问题,如果您通过单击答案旁边的接受按钮来接受此答案作为正确的解决方案,将不胜感激:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多