转换IPLimage<&燃气轮机;使用openCVSharp在unity3d中创建纹理2D

转换IPLimage<&燃气轮机;使用openCVSharp在unity3d中创建纹理2D,opencv,unity3d,augmented-reality,Opencv,Unity3d,Augmented Reality,正如主题所说。我试图在unity3d中实现openCVSharp surf,但在将iplimage转换为texture2d的过程中遇到了一些困难。还考虑到该转换过程应至少运行25 fps。因此,任何提示或建议都非常有用 可能有点晚了,我现在正在做同样的事情,下面是我的解决方案: void IplImageToTexture2D (IplImage displayImg) { for (int i = 0; i < height; i++) { for (in

正如主题所说。我试图在unity3d中实现openCVSharp surf,但在将iplimage转换为texture2d的过程中遇到了一些困难。还考虑到该转换过程应至少运行25 fps。因此,任何提示或建议都非常有用

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

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();
}
void IplImageToTexture2D(IplImage显示img)
{
对于(int i=0;i
但是有点慢。
仍在尝试提高性能。

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

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);
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;
}

嘿,不,我没有这部分的代码。我不知道从哪里开始。然而,我想,它必须在没有系统绘图的情况下以某种方式完成。因为,该部分在unity代码结构中根本不可用。这家伙有办法。我本想从texture2d中获取像素并将其复制到新的iplimage中,但同样,我也不知道,谷歌目前也没有真正的帮助