在 Unity 中获取英特尔实感深度流
Get Intel RealSense Depth Stream in Unity
我目前正在尝试将新实感生成(D435、SDK2)的深度流作为 Unity 中的 Texture2D。我可以轻松访问作为 WebCamTexture 的常规 RGB 流,当我尝试获取 depthsream 时,出现此错误:
Could not connect pins - RenderStream()
Unity 识别深度相机,但无法显示。
我也尝试过使用 Unity Wrapper 的预制件,但它们并不真正适用于我的项目。如果我使用预制件,我可以将数据获取到 R16 纹理。有谁知道如何获取图像中特定点的深度信息(GetPixel() 不适用于 R16 纹理...)?我更愿意获取 WebCamTexture 流,如果这不起作用,我必须以不同的方式保存信息...
我为获取深度数据所做的是创建我自己的 class 继承自 RawImage。我使用我的自定义 class 作为深度渲染流的目标,并从我的 class.
中的纹理组件获取图像
Binding to custom class
在我的例子中,我想将 16 位深度数据转换为 8 位 pr 通道 rgb pgn,以便我可以将其导出为灰度图像。这是我解析图像数据的方式:
byte[] input = texture.GetRawTextureData();
//create array of pixels from texture
//remember to convert to texture2D first
Color[] pixels = new Color[width*height];
//converts R16 bytes to PNG32
for(int i = 0; i < input.Length; i+=2)
{
//combine bytes into 16bit number
UInt16 num = System.BitConverter.ToUInt16(input, i);
//turn into float with range 0->1
float greyValue = (float)num / 2048.0f;
alpha = 1.0f;
//makes pixels outside measuring range invisible
if (num >= 2048 || num <= 0)
alpha = 0.0f;
Color grey = new Color(greyValue, greyValue, greyValue, alpha);
//set grey value of pixel based on float
pixels.SetValue(grey, i/2);
}
要获取像素,您只需访问新的像素数组即可。
我目前正在尝试将新实感生成(D435、SDK2)的深度流作为 Unity 中的 Texture2D。我可以轻松访问作为 WebCamTexture 的常规 RGB 流,当我尝试获取 depthsream 时,出现此错误:
Could not connect pins - RenderStream()
Unity 识别深度相机,但无法显示。
我也尝试过使用 Unity Wrapper 的预制件,但它们并不真正适用于我的项目。如果我使用预制件,我可以将数据获取到 R16 纹理。有谁知道如何获取图像中特定点的深度信息(GetPixel() 不适用于 R16 纹理...)?我更愿意获取 WebCamTexture 流,如果这不起作用,我必须以不同的方式保存信息...
我为获取深度数据所做的是创建我自己的 class 继承自 RawImage。我使用我的自定义 class 作为深度渲染流的目标,并从我的 class.
中的纹理组件获取图像Binding to custom class
在我的例子中,我想将 16 位深度数据转换为 8 位 pr 通道 rgb pgn,以便我可以将其导出为灰度图像。这是我解析图像数据的方式:
byte[] input = texture.GetRawTextureData();
//create array of pixels from texture
//remember to convert to texture2D first
Color[] pixels = new Color[width*height];
//converts R16 bytes to PNG32
for(int i = 0; i < input.Length; i+=2)
{
//combine bytes into 16bit number
UInt16 num = System.BitConverter.ToUInt16(input, i);
//turn into float with range 0->1
float greyValue = (float)num / 2048.0f;
alpha = 1.0f;
//makes pixels outside measuring range invisible
if (num >= 2048 || num <= 0)
alpha = 0.0f;
Color grey = new Color(greyValue, greyValue, greyValue, alpha);
//set grey value of pixel based on float
pixels.SetValue(grey, i/2);
}
要获取像素,您只需访问新的像素数组即可。