使用C#和EmguCV进行运动检测

时间:2016-06-28 17:58:29

标签: c# emgucv motion motion-detection opticalflow

我是emgucv和光流的新手。我试图识别视频中的运动物体,并在它们周围绘制圆形或矩形或其他形状。我必须使用opticalflow.HS和opticalflow.LK。这是我想要做的第一件事。我正在使用emgu cv 2.4.9。我有一些代码,但这只是一些思考。我红色前一帧和当前帧并将其发送到opticalflow.HS,但我不知道该怎么做,我找不到任何使用HS的例子,所以我真的很欣赏同样的例子在光流后做什么。 HS还有一些建议。

  private void ProcessFrame(object sender, EventArgs e)
  {
      bool firstFrame = true;
      bool keepProcessing = true;

      Image<Gray, Byte> nextFrame = new Image<Gray, byte>(160, 640);
      Image<Gray, Byte> previousFrame = null;

      while (keepProcessing)
      {
          // ****** Change - Save previous frame before getting next one
          // Only do this if the first frame has passed
          if (!firstFrame)
              previousFrame = nextFrame.Clone();

          // grab the next frame from video source
         // _capture.Grab();

          // decode and return the grabbed video frame
          nextFrame = _capture.RetrieveGrayFrame();

          // if the frame is valid (not end of video for example)
          if (!(nextFrame==null))
          {
              // **** Change - If we are on the first frame, only show that and
              // set the flag to false
              if (firstFrame)
              {
                  firstFrame = false;

              }
              else
              {
                  Image<Gray, float> velx = new Image<Gray, float>(previousFrame.Size);
                  Image<Gray, float> vely = new Image<Gray, float>(nextFrame.Size);
                  OpticalFlow.HS(previousFrame, nextFrame, true, velx, vely, 0.1d, new MCvTermCriteria(100));
                  //capturedImageBox.Image = nextFrame;

              }
          }
          else
          {
              keepProcessing = false;
          }
      }

1 个答案:

答案 0 :(得分:0)

OpticalFlow.HS Method使用Horn&amp ;;计算第一个输入图像的每个像素的流量。 Schunck算法。

之后,我建议你应该密集光流绘图。希望如此帮助你。

Go to link.