我已经被这个问题困扰了好几天了。我正在尝试对我的项目进行一些图像处理。我查看了ARCore提供的计算机视觉示例,但它仅显示了如何以黑白方式访问摄像头框架。我的图像需要颜色。我已经看过Save AcquireCameraImageBytes() from Unity ARCore to storage as an image
也没有运气

我有一个名为GetImage()的函数,该函数应该将相机框架作为纹理返回。

public Texture GetImage() {

    if (!Frame.CameraImage.AcquireCameraImageBytes().IsAvailable) {
        return null;
    }

    var ptr = Frame.CameraImage.AcquireCameraImageBytes();
    var bufferSize = ptr.Width * ptr.Height * 4;

    if (_tex == null) {
        _tex = new Texture2D(ptr.Width, ptr.Height, TextureFormat.RGBA32, false, false);
    }

    if (_bytes == null) {
        _bytes = new byte[bufferSize];
    }

    Marshal.Copy(_ptr.Y, _bytes, 0, bufferSize);
    _tex.LoadRawTextureData(_bytes);
    _tex.Apply();
    return _tex;
}


我在使用此代码时遇到两个问题。

首先,几秒钟后,我的应用程序冻结,并显示错误“无法获取状态错误资源耗尽的摄像机图像”。

第二个问题是,如果我确实设法显示图像,则该图像不是彩色的,并且像本文ARCore for Unity save camera image一样重复四次。

有没有人有一个使用彩色访问ARCore图像的可行示例,或者知道我的代码有什么问题?

最佳答案

使用“ Frame.CameraImage.AcquireCameraImageBytes();”您将获得YUV-420-888格式(see doc)的灰度图像,因此,通过正确的YUV到RGB转换,您应该获得彩色相机图像。 (但是我还没有找到将YUV转换为RGB的正确方法)
我有一个类似的问题:ARCore Save Camera Image (Unity C#) on Button click在我更新的问题中,我发布了代码,该代码从AcquireCameraImagesBytes()获得了灰度图像。

如果要进行图像处理,是否已经看过Unity Computer Vision Example.示例?请参见_OnImageAvailable。使用TextureReader API可以获得彩色图像。
另外,这个github问题可能会有所帮助:https://github.com/google-ar/arcore-unity-sdk/issues/221

关于android - 如何获得彩色的ARCore AcquireCameraImageBytes()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50879047/

10-12 04:35