【发布时间】:2017-06-25 04:04:59
【问题描述】:
我正在编写一个简单的 Android 应用程序,我在其中使用 ImageReader.OnImageAvailableListener 检索帧缓冲区以获取最新图像并处理 Y 平面。我使用这个平面来计算一个简单的指标,它的值将决定我是否在屏幕上显示某些内容。
我的问题是如何只处理和解释 Y 平面(我不需要 U 和 V 平面)。据我了解,Y平面包含亮度通道; IE。通道与图像的亮度。
文档指出每个像素是 8 位,即一个字节,我认为这是有道理的,因为像素位于 ByteBuffer 中。然而,在打印 Y 通道的第一个字节的一些实验之后(我通过在 ImageReader.OnImageAvailableListener 中调用 Log.i(TAG, String.valueOf(image.getPlanes()[0].getBuffer().get(0) 来完成此操作),我看不到图像“亮度”和字节值之间有任何相关性。例如,当我将相机放在完全黑色的背景上时,我会得到从 ~0 到 15 的亮度值。当我把它放在明亮的白色背景上时,我得到的值在 -110 左右。但是,这些不是某种最小值或最大值。在非全白或全黑背景下,我会得到似乎与亮度完全不相关的值。
我的问题是,这些亮度值应该如何解释,它们是否与特定像素的图像亮度有任何关联?我是否正确检索帧缓冲区的亮度值,如果没有,应该如何检索它们?
【问题讨论】:
标签: android image-processing camera android-image android-camera2