android - 如何获得 ARCore AcquireCameraImageBytes() 的颜色?
问题描述
我已经被这个问题困扰了好几天了。我正在尝试对我的项目进行一些图像处理。我查看了ARCore
提供的计算机视觉示例,但它只显示了如何访问黑白相机帧。我的图像需要颜色。我已经查看了将 Unity ARCore 中的 Save AcquireCameraImageBytes() 保存为图像
,但没有运气。
我有一个名为的函数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 格式的灰度图像(请参阅文档)因此,通过正确的 YUV 到 RGB 转换,您应该获得彩色相机图像。(但是我还没有找到正确的 YUV 到 RGB 转换)我有一个类似的问题:ARCore Save Camera Image (Unity C#) on Button 单击我更新的问题我发布了从 AcquireCameraImagesBytes() 获取灰度图像的代码.
如果您想做图像处理,您是否已经看过Unity 计算机视觉示例。例子?请参阅_OnImageAvailable使用 TextureReader API,您可以获得彩色图像。这个 github 问题也可能会有所帮助:https ://github.com/google-ar/arcore-unity-sdk/issues/221
推荐阅读
- c# - 如何在只有设置器的接口上模拟委托的提升?
- sql-server - 适用于 Visual Studio 2017 的 SSIS/SSDT 插件 - SharePoint 适配器
- powershell - 如何使用来自用户输入的参数从 PowerShell 运行 .exe?
- node.js - 传递道具点击按钮
- c# - 使用正则表达式识别何时提供多个域
- python - 如何在不改变其形状的情况下取消嵌套(unlevel)不必要的嵌套列表?(Python)
- css - 页脚颜色颜色完整的网页 - 如何修复?
- windows - 如何使用 anaconda 提示符而不是 cmd.exe 启动 bat 脚本?
- php - PHP echo json 总是空值
- .htaccess - Htaccess 允许给定的 ip 只访问一个 url