2012-08-12 56 views
0

像主题说的那样。我正试图在unity3d中实现openCVSharp冲浪,并将其从iplimage转换为texture2d。另外考虑到这个转换过程应该至少在25fps下运行。所以任何提示或建议都非常有用!使用openCVSharp在unity3d中转换IPLimage <> texture2d

+0

heey,不,我没有这部分的任何代码。我不知道从哪里开始。然而,我想,如果没有system.drawing,它必须以某种方式完成。因为该部分在统一码结构中根本不可用。这家伙有一些工作:http://www.ivanozanchetta.com/?p=83。我想从texture2d中获取像素并将它们复制到一个新的iplimage中,但是再次,没有想法和谷歌目前没有真正帮助。 ;-) – stationX 2012-08-13 05:40:02

回答

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

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

1
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); 
0

为了提高性能使用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; 
}