使用Android (2.3.3)手机,我可以使用相机检索预览,并使用onPreviewFrame(byte[] data, Camera camera)方法获取YUV图像。
对于某些图像处理,我需要将这些数据转换为RGB图像并在设备上显示。使用基本的java / android方法,它以不到5fps的可怕速度运行……
现在,使用NDK,我想加快速度。问题是:如何在C中将YUV数组转换为RGB数组?有没有一种方法可以显示它(也许使用OpenGL?)在本机代码中?实时应该是可能的(高通AR演示向我们展示了这一点)。
我不能在使用setTargetDisplay的同时在上面放一个覆盖层!
我知道Java,最近开始使用Android SDK,对C++一无所知
发布于 2011-10-02 00:22:40
你有没有考虑过使用OpenCV's Android port?它可以做的不仅仅是颜色转换,而且速度很快。
发布于 2011-10-01 23:44:19
谷歌搜索返回this page,查找YUV->RGB565的C实现。作者甚至为它包含了JNI包装器。
发布于 2011-10-05 17:08:32
您也可以通过继续使用Java来获得成功。我这样做是为了androangelo-app的imagedetectíon。我使用了你在这里通过搜索"decodeYUV“找到的示例代码。
对于处理帧,要考虑的关键部分是图像大小。根据设备的不同,您可能会得到相当大的图像。例如,对于Galaxy S2,支持的最小预览大小为640*480。这是大量的像素。
我所做的是,在yuvtorgb解码之后,每隔一行每隔一列使用一次。因此,处理320*240图像的效果非常好,使我能够获得20fps的帧率。(包括一些降噪,从rgb到hsv的颜色转换和圆圈检测)
此外,您应该仔细检查提供给setPreview函数的图像缓冲区的大小。如果它太小,垃圾收集将破坏一切。
对于结果,您可以检查androangelo-app的校准屏幕。在那里,我将检测到的图像覆盖在相机预览上。
https://stackoverflow.com/questions/7621178
复制相似问题