首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能从CameraPreview中获取一个像素?

有没有可能从CameraPreview中获取一个像素?
EN

Stack Overflow用户
提问于 2019-02-19 20:28:14
回答 2查看 48关注 0票数 0

我按照Android Studio教程获得了CameraPreview to work (Camera API Android Developer Guide)。这对我来说很好,我可以在我的FrameLayout中查看摄像头流。

但我想在每次更改时从预览中的特定像素获得RGB值。我找不到将previewImage转换为位图的方法,也不能理解onPreviewFrame方法的用法

@Override public void onPreviewFrame(byte[] data, Camera camera) {}

如何从Camerapreview像素获取RGB值?

EN

回答 2

Stack Overflow用户

发布于 2019-02-21 01:16:35

如果您使用的是Camera2应用程序接口,则可以在应用程序中实现ImageReader.OnImageAvailableListener类。在此之后,您将覆盖onImageAvailable函数,该函数获取一个ImageReader作为参数。然后,您就可以访问刚刚用imageReader.acquireNextImage()录制的图像。

票数 0
EN

Stack Overflow用户

发布于 2019-02-21 05:38:34

不幸的是,无论使用哪种API,您都需要自己处理YUV数据。

相机设备本身就会生成YUV数据,而不是RGB,因此API不会花费额外的资源来自动转换数据。主要的简单例外是将数据输送到GPU,其中GPU驱动程序会在像素着色器中为您自动将YUV转换为RGB。

但是,如果您只是在编写常规应用程序代码,则需要解析数据。

对于不推荐使用的android.hardware.Camera接口,默认情况下输出为NV21,通常可以选择YV12作为另一个选项。

维基百科上关于YUV的文章相对有帮助:https://en.wikipedia.org/wiki/YUV

但是对于YUV->RGB转换,它的转换系数是错误的;它们应该是:

代码语言:javascript
复制
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)

(Cb = U, Cr = V)

你也可以看看这篇stackoverflow文章:Extract black and white image from android camera's NV21 format

它的代码看起来对转换是正确的。

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

https://stackoverflow.com/questions/54766370

复制
相关文章

相似问题

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