天天看點

Unity3D WebCamTexture 取幀渲染、像素讀取的終端适配

Unity3D可以通過WebCamTexture擷取攝像頭的像素資料,用于渲染到紋理或者圖像相關計算。 由于Win/Mac/Adnroid/iOS等各系統平台和硬體環境下,WebCamTexture 用于渲染和圖像計算時表現不完全一緻,很容易造成圖像渲染或者計算不正确,給調試帶來很大麻煩,是以在這裡總結一下。

Unity3D可以通過WebCamTexture擷取攝像頭的像素資料,用于渲染到紋理或者圖像相關計算。

由于Win/Mac/Adnroid/iOS等各系統平台和硬體環境下,WebCamTexture 用于渲染和圖像計算時表現不完全一緻,很容易造成圖像渲染或者計算不正确,給調試帶來很大麻煩,是以在這裡總結一下。

用一張3*3像素的圖檔來表示,Unity3D紋理渲染像素順序如下:

7

8

9

4

5

6

1

2

3

左下角為原點,向上和向右為正方向排布像素點

OpenCV進行圖像計算的時候,像素順序如下:

左上角為原點,向下和向右為正方向

渲染時像素順序:

擷取的像素點數組排布順序:

OpenCV讀入像素計算時,将圖像在y方向上翻轉就可以了

同Windows

但是此處有一點要注意的是,前置攝像頭需要的實際上是左右調換的鏡面成像,是以實際上需要的像素點排布順序是:

在紋理渲染和圖像計算時,最好是同時做一個x方向上的翻轉,以得到上邊的像素點順序

iOS後置攝像頭擷取的像素順序與OpenCV計算時的順序一緻,若直接渲染會上下颠倒。

其像素點排布順序是:

是以在使用iOS後置攝像頭擷取幀并渲染時,應注意在y方向上對圖像做翻轉

iOS前置攝像頭擷取的像素點排布順序是:

渲染時可不對圖像做任何處理,這就是前置攝像頭需要的左右鏡面效果

OpenCV讀取時,按照與Windwos一緻的讀取方式,将圖像讀取為

即可

從WebCamTexture 中擷取的像素點用Color32數組來表示

OpenCV讀取該數組記憶體位址的像素點資料,在所有平台下,讀取的順序都是 r-g-b-a