Android 使用Camera2预览和处理相机数据 问题:
我想做一些类似于对样本所做的事情,即:Android 使用Camera2预览和处理相机数据 问题:,android,android-camera2,Android,Android Camera2,我想做一些类似于对样本所做的事情,即: 使用TextureView预览来自相机的图像 使用图像阅读器处理来自相机的图像 关于2,存在一些差异: 我只对要处理的图像的灰度通道(亮度)感兴趣。它们的尺寸应该在1000 x 1000像素左右(而不是可用的最高分辨率) 当要处理的图像可用时,将调用通用的process(image)方法,而不是将图像保存到磁盘。这个方法所做的超出了这个问题的范围,但是它需要大约50毫秒才能返回 图像数据应定期处理(约10 FPS,但速度并不关键),而不是最终处理 如何
TextureView预览来自相机的图像
图像阅读器处理来自相机的图像
2
,存在一些差异:
- 我只对要处理的图像的灰度通道(亮度)感兴趣。它们的尺寸应该在1000 x 1000像素左右(而不是可用的最高分辨率)
- 当要处理的图像可用时,将调用通用的
方法,而不是将图像保存到磁盘。这个方法所做的超出了这个问题的范围,但是它需要大约50毫秒才能返回process(image)
- 图像数据应定期处理(约10 FPS,但速度并不关键),而不是最终处理
Camera2
API实现这一点
观察
- 我改变了创建
实例的方式,选择了更小的尺寸和不同的格式(ImageReader
而不是YUV\u 420\u 888
)。将访问JPEG
平面以获取亮度数据。有没有更有效的格式(因为我只是忽略了Y
和U
平面)V
和TextureView
表面应定期填充,但填充速率不同。由于在ImageReader
上只能有一个重复的CameraCaptureSession
(可以通过调用CameraRequest
进行设置),我是否应该定期手动调用setRepeatingRequest()
(例如,使用预览请求调用capture()
)与流程请求一起定期提交)setRepeatingRequest()
- 通过发送重新处理的请求以从预览图像中获取要处理的图像,可以提高性能吗?如果是,我怎么做
if (result.getFrameNumber() % 10 != 0) return;
最后记住关闭ImageReader OnImageAvailableListener中接收的所有图像,以避免内存泄漏并提高性能:p
@Override
public void onImageAvailable(ImageReader imageReader) {
Image image = null;
try {
image = imageReader.acquireNextImage();
//Do whatever you want with your Image
if (image != null) {
image.close();
}
} catch (IllegalStateException iae) {
if (image != null) {
image.close();
}
}
}
希望它能帮助你,如果我能在其他方面帮助你,请告诉我