我正在创建一个Android应用程序来使用相机执行一些图像处理技术,它需要快速。这是整个系统如何工作的伪代码:
1. loop while not finished
1.1 get image frame
1.2 process image for object detection
2. end loop
我实际上对Camera
类的基础知识有疑问:
SurfaceView
来预览图像。takePicture()
方法开始,可以在没有预览的情况下获取图像数据数组吗?我真正的问题是,在处理图像后(如上所述)快速迭代地获取图像数据(例如,byte[]
数组)的最佳方法是什么?
我计划使用takePicture()
方法来获取图片数据,但如果这是唯一的方法或其他更好的方法,我需要您的意见。
答案 0 :(得分:2)
您可以将SurfaceView设置为相机的预览显示,并使用PreviewCallback获取每个预览帧的数据。如果您不需要takePicture捕获的高分辨率,这将比使用takePicture更好。换句话说,如果您想以更快的速度捕获质量较低的图像,请使用PreviewCallback ...如果您想以非常慢的速度捕获更高质量的图像,请使用takePicture。
至于你的问题,我不认为你可以不使用预览显示拍照,但我可能是错的。
class MainActivity extends Activity implements Camera.PreviewCallback, SurfaceHolder.Callback {
...
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
camera.setPreviewCallback(this);
...
}
public void onPreviewFrame(byte[] data, Camera camera) {
// image data contained in data... do as you wish
}
}