使用NDK在Android中进行实时图像处理

使用NDK在Android中进行实时图像处理,android,c,image-processing,real-time,android-camera,Android,C,Image Processing,Real Time,Android Camera,使用Android(2.3.3)手机,我可以使用摄像头通过onPreviewFrame(byte[]data,camera-camera)方法检索预览,以获取YUV图像 对于一些图像处理,我需要将这些数据转换为RGB图像并在设备上显示。使用基本的java/android方法,它以低于5 fps的惊人速度运行 现在,使用NDK,我想加快速度。问题是:如何将YUV数组转换为C中的RGB数组?有没有办法在本机代码中显示它(可能使用OpenGL?)?实时应该是可能的(高通AR演示向我们展示了这一点) 我

使用Android(2.3.3)手机,我可以使用摄像头通过
onPreviewFrame(byte[]data,camera-camera)
方法检索预览,以获取YUV图像

对于一些图像处理,我需要将这些数据转换为RGB图像并在设备上显示。使用基本的java/android方法,它以低于5 fps的惊人速度运行

现在,使用NDK,我想加快速度。问题是:如何将YUV数组转换为C中的RGB数组?有没有办法在本机代码中显示它(可能使用OpenGL?)?实时应该是可能的(高通AR演示向我们展示了这一点)

我无法使用
setTargetDisplay
并在其上放置覆盖


我了解Java,最近刚开始使用Android SDK,在C方面没有任何经验,这是一个针对YUV->RGB565的C实现返回的Google搜索。作者甚至为它添加了JNI包装器。

您考虑过使用它吗?它不仅可以进行颜色转换,而且速度非常快。

使用Java也可以取得成功。我这样做是为了安卓安卓应用程序的ImageDetectioníon。 我使用了您在这里通过搜索“decodeYUV”找到的示例代码

处理帧时,要考虑的主要部分是图像大小。 根据设备的不同,您可能会获得相当大的图像。i、 e.对于星系S2 支持的最小预览大小为640*480。这是大量的像素

我所做的是,在yuvtorgb解码之后,只使用第二行和第二列。因此,处理一幅320*240的图像效果非常好,使我能够获得20fps的帧速率。(包括一些降噪、从rgb到hsv的颜色转换和圆形检测)

此外,您应该仔细检查提供给setPreview函数的图像缓冲区的大小。如果太小,垃圾收集会破坏一切


对于结果,您可以查看Andrangelo应用程序的校准屏幕。在那里,我将检测到的图像覆盖在相机预览上。

哇,在整个搜索过程中,OpenCV从未弹出!(以前在普通C++中使用过)我不知道他们有android端口。谢谢你的提示;从我在示例应用程序中看到的情况来看,它满足了我的需要,并且人脸检测接近实时!深入挖掘OpenCV非常感谢=)没问题!很高兴我能帮上忙,祝你玩得开心!是的,我已经找到了这个,尽管我似乎无法让它工作。让我先试试OpenCV库,因为它们已经有很多图像处理代码=)谢谢!