【问题标题】:Converting YUV420P to JPEG on Unity without Shaders在没有着色器的 Unity 上将 YUV420P 转换为 JPEG
【发布时间】:2020-10-07 09:23:45
【问题描述】:

我正在使用 MagicLeap Headset 和 MLCamera API 来捕获输出为 YUV_420_888 的 rawvideocapture,我假设它是 YUV420P。 API 分别返回 yBuffer、uBuffer 和 vBuffer。我在没有位图的情况下在 c# 上组合这些通道时遇到了麻烦,因为我使用的是统一我使用的是 Mono。我想要做的是组合这些通道并将其发送到我的远程 python 服务器以处理我捕获的图像。要处理图像,它需要是完整的图像。我尝试只使用 Y 平面并创建灰度图像,但服务器无法处理它,所以我需要在客户端上组合所有 3 个通道,然后将其压缩为更可取的 jpeg,因为尺寸急剧减小并且我正在处理尽管相机输出为 1920x1080,但图像尺寸为 420x420。我在过去一周半尝试不同的方法,但找不到像样的东西。有几种方法特别适用于 Android,但如果我不需要,我不想将其转换为 NV21。我也看到了一个使用 ARCore 的,但我也不能使用那个,因为我使用的是 MagicLeap。

PS:延迟和处理时间非常重要,所以如果有办法直接将 YCbCr 转换为 jpeg 而无需将其转换为 RGB,我认为这会更好地帮助我的情况,但我不知道是否有可能。总的来说,我认为我缺乏一些阻碍我走得更远的基本知识。

非常感谢任何帮助!

【问题讨论】:

  • 您是否尝试过使用 yuv 空间 Texture2D tex = new Texture2D(420, 420, TextureFormat.YUY2, false); 创建纹理,然后使用 ImageConversion.EncodeToJPG(Texture2D tex); 将该纹理转换为 jpg?
  • 您好 Remy 感谢您的建议,我没有尝试过,因为我不确定如何将 YUV_420_888 转换为 YUY2。您认为它会比其他可能的解决方案更快吗?

标签: c# image unity3d client-server magic-leap


【解决方案1】:

我过去曾尝试过类似的事情,在 YUV420 的问题上苦苦挣扎了数周,但无法解决。最后,我买了这个库OpenCV for Unity。它有专门为 MagicLeap 定制的部件,包括从相机读取帧以降低分辨率以加快速度。 我不确定它是否可以实时管理。也许在降低的分辨率下,是的。

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2018-11-19
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多