2012-08-12 55 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; 
}