在我的项目中,我需要连续捕捉摄像机流的帧。这是我使用的当前代码片段。
为了设置 ImageReader,我将其设置maxImages
为 20。假设每次触发回调时,ImageReader 队列中都会有 20 帧。
imageReader = ImageReader.newInstance(
optimumSize.getWidth(),
optimumSize.getHeight(),
ImageFormat.YUV_420_888,
20
);
然后访问这 20 帧的每个图像。我使用了以下代码段。
imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireNextImage();
while (image != null) {
// some processing here.....
image.close();
image = reader.acquireNextImage();
}
if (image != null) {
image.close();
}
}
}, processingHandler);
这里的主要障碍是能够在回调中访问 20 帧中的每一帧,以进行进一步的图像处理。然而,上述代码似乎有一些问题(我只能访问底层队列中的最新图像)。事实上,我只需要访问用户指定的每一帧中的一个小补丁(50 x 50 像素)。
这样做的原因是我需要获取采样频率为 ~60Hz 的 20 个连续帧数据。如果我们只能在每个回调中访问单帧,这似乎很难实现,最多只能达到 30fps。
任何建议都会非常受欢迎!谢谢!