在Unity中获取英特尔实感深度流

时间:2018-06-20 10:17:04

标签: unity3d textures intel depth realsense

我目前正在尝试获取新一代RealSense(D435,SDK2)的深度流作为Unity中的Texture2D。我可以轻松地将常规的RGB流作为WebCamTexture访问,当我尝试获取depthsream时,出现以下错误:

Could not connect pins - RenderStream()

Unity可以识别景深相机,但无法显示。

我也尝试使用Unity Wrapper的预制件,但是它们对于我的项目实际上并不起作用。如果使用预制件,则可以将数据转换为R16纹理。有谁知道我如何在图像的某个点获得深度信息(GetPixel()无法用于R16纹理...)?我希望获得一个WebCamTexture流,如果这不起作用,则必须以其他方式保存信息...

1 个答案:

答案 0 :(得分:1)

我要做的是获取深度数据,是创建从RawImage继承的我自己的类。我使用自定义类作为深度渲染流的目标,并从类中的纹理组件获取图像。

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

要获取像素,您只需访问新的像素数组即可。