首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NDK的Android实时图像处理

基于NDK的Android实时图像处理
EN

Stack Overflow用户
提问于 2011-10-01 23:35:24
回答 3查看 4.9K关注 0票数 1

使用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++一无所知

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-02 00:22:40

你有没有考虑过使用OpenCV's Android port?它可以做的不仅仅是颜色转换,而且速度很快。

票数 3
EN

Stack Overflow用户

发布于 2011-10-01 23:44:19

谷歌搜索返回this page,查找YUV->RGB565的C实现。作者甚至为它包含了JNI包装器。

票数 0
EN

Stack Overflow用户

发布于 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的校准屏幕。在那里,我将检测到的图像覆盖在相机预览上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7621178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档