【问题标题】:Converting IPLimage <> texture2d in unity3d using openCVSharp使用 openCVSharp 在 unity3d 中转换 IPLimage <> texture2d
【发布时间】:2012-08-12 10:42:23
【问题描述】:

就像主题所说的那样。我正在尝试在unity3d中实现openCVSharp surf,并且有点卡在从iplimage到texture2d的转换部分。还考虑到此转换过程应至少以 25 fps 运行。所以任何提示或建议都非常有帮助!

【问题讨论】:

  • 嘿,不,我没有这部分的任何代码。我不知道从哪里开始。但是,我认为必须在没有 system.drawing 的情况下以某种方式完成。因为,该部分在统一代码结构中根本不可用。这家伙有一些工作:ivanozanchetta.com/?p=83。我想从 texture2d 中获取像素并将它们复制到一个新的 iplimage 中,但同样,不知道,谷歌目前并没有真正提供帮助。 ;-)

标签: opencv unity3d augmented-reality


【解决方案1】:

可能有点晚了,我现在正在做同样的事情,这是我的解决方案:

void IplImageToTexture2D (IplImage displayImg)
{
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            float b = (float)displayImg[i, j].Val0;
            float g = (float)displayImg[i, j].Val1;
            float r = (float)displayImg[i, j].Val2;
            Color color = new Color(r / 255.0f, g / 255.0f, b / 255.0f);
            videoTexture.SetPixel(j, height - i - 1, color);
        }
    }
    videoTexture.Apply();
}

但它有点慢。 仍在努力提高性能。

【讨论】:

    【解决方案2】:
    Texture2D tex = new Texture2D(640, 480);
    CvMat img = new CvMat(640, 480, MatrixType.U8C3);
    
    byte[] data = new byte[640 * 480 * 3];
    Marshal.Copy(img.Data, data, 0, 640 * 480 * 3);
    tex.LoadImage(data);
    

    【讨论】:

      【解决方案3】:

      要提高性能,请使用 Unity3d 的未记录函数 LoadRawTextureData :

      Texture2D IplImageToTexture2D(IplImage img)
      {
          Texture2D videoTexture = new Texture2D(imWidth, imHeight, TextureFormat.RGB24, false);
          byte[] data = new byte[imWidth * imHeight * 3];
          Marshal.Copy(img.ImageData, data, 0, imWidth * imHeight * 3);
          videoTexture.LoadRawTextureData(data);
          videoTexture.Apply();
          return videoTexture;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2016-02-11
        • 2013-05-17
        相关资源
        最近更新 更多