如何将颜色映射到密集的光流

时间:2014-05-04 04:41:13

标签: c# emgucv opticalflow

我试图根据他们在Emgu Cv中的移动(如矢量方向)给图像赋予某些颜色。我已设法计算到视频流的密集光流。我用过这个

OpticalFlow.Farneback(prev,NextFrame,velx,vely,0.5,1,1,2,5,1.1,Emgu.CV.CvEnum.OPTICALFLOW_FARNEBACK_FLAG.FARNEBACK_GAUSSIAN);

变量vely和velx包含垂直和水平方向的速度。任何人都知道如何将颜色映射到这些。有许多算法可以计算密集流量。 HS也可以使用,但我不知道该使用什么。 任何解决方案都会非常感激。

编辑:

Optical Flow Color Map in OpenCV

这是我想要的,因为我正在使用Emgu cv我试图将此代码转换为c#但我无法理解如何将密集流传递给函数“colorflow”。

public void colorflow(MCvMat imgColor)
  {
      MCvMat imgHsv = new MCvMat();
      double max_s = 0;
      double[] hsv_ptr = new double[3000];
      IntPtr[] color_ptr = new IntPtr[3000];
      int r = 0, g = 0, b = 0;
      double angle = 0;
      double h = 0, s = 0, v = 0;
      double deltaX = 0, deltaY = 0;
      int x = 0, y = 0;

      for (y = 0; y < imgColor.rows; y++)
      {
          for (x = 0; x < imgColor.cols; x++)
          {
              PointF fxy = new PointF(y, x);                  
              deltaX = fxy.X;
              deltaY = fxy.Y;
              angle = Math.Atan2(deltaX, deltaY);

              if (angle < 0)
                  angle += 2 * Math.PI;

              hsv_ptr[3 * x] = angle * 180 / Math.PI;
              hsv_ptr[3 * x + 1] = Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
              hsv_ptr[3 * x + 2] = 0.9;

              if (hsv_ptr[3 * x + 1] > max_s)
                  max_s = hsv_ptr[3 * x + 1];
          }

      }
      for (y = 0; y < imgColor.rows; y++)
      {
          //hsv_ptr=imgHsv.ptr<float>(y);
          //color_ptr=imgColor.ptr<unsigned char>(y);



          for (x = 0; x < imgColor.cols; x++)
          {
              h = hsv_ptr[3 * x];
              s = hsv_ptr[3 * x + 1] / max_s;
              v = hsv_ptr[3 * x + 2];

              //hsv2rgb(h,s,v,r,g,b);
              Color c = ColorFromHSV(h, s, v);

              color_ptr[3 * x] = (IntPtr)c.B;
              color_ptr[3 * x + 1] = (IntPtr)c.G;
              color_ptr[3 * x + 2] = (IntPtr)c.R;
          }
      }


     drawLegendHSV(imgColor, 15, 25, 15);
  }

我在如何隐藏代码中的两条注释行时遇到了麻烦。任何人都可以帮我这个。?

Farneback算法给出两个图像velx和vely的另一件事。它没有给出流量(MCvMat)。 colorFlow算法它采用MCvMat类型参数。我对代码做错了。感谢

0 个答案:

没有答案