如何在Android相机图像上运行原型算法?

时间:2012-07-21 23:01:58

标签: android jpeg android-camera augmented-reality

我有一个Android应用程序的想法,它依赖于我实时处理来自手机摄像头的图像(想想Word Lens之类的处理必须要做的事情)。我希望通过在静态图像上运行它来在Python中对我的算法进行原型设计,但是我希望静态图像与通常从Android手机相机接收的格式相匹配(我不想为RGB制作一个有效的算法)然后找出Android的相机API为您提供HSV字节数组)。两个问题:

  1. 格式是什么? (或者至少是最常见的,因为Android硬件不同)
  2. 如何在Linux上将我的jpg测试图像转换为此格式?

1 个答案:

答案 0 :(得分:1)

对于setPreviewFormat documentation启用的应用程序绑定回调,所有Android摄像机都需要支持两种YUV格式,NV21和YV12(请参阅setPreviewCallback)。

某些设备可能支持其他格式(RGB,YUYV2等),但这两种设备是强制性的,因此最好选择其中一种格式。 YV12具有更高的效率,尽管这取决于所讨论的硬件。

对于第二种,您可以使用某种实用程序(如ImageMagick)进行颜色转换,但关于这些格式的另一点是它们是针对色度(颜色)平面进行子采样的; NV21和YV12都在两个维度上将颜色格式下采样2倍。例如,如果图像大小为640x480,则Y(亮度)通道将为640x480,但U和V通道均为320x240。您可能需要自己进行子采样,因为大多数图像库都没有公开这种格式(JPEG图像实际上通常以类似的子采样YUV格式存储,但大多数库转换回完整RGB在给你数据之前。)

编辑:附加说明

或者,如果您的算法在GPU上运行良好,您可以使用相机外的setPreviewTexture路径,这样您就可以在GPU着色器中处理图像数据。在这种情况下,数据将始终为RGB,在具有OpenGL 2.0的GLSL着色器中作为纹理访问。