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像素左右(而不是可用的最高分辨率)
    • 当要处理的图像可用时,将调用通用的
      process(image)
      方法,而不是将图像保存到磁盘。这个方法所做的超出了这个问题的范围,但是它需要大约50毫秒才能返回
    • 图像数据应定期处理(约10 FPS,但速度并不关键),而不是最终处理
    如何使用
    Camera2
    API实现这一点

    观察
    • 我改变了创建
      ImageReader
      实例的方式,选择了更小的尺寸和不同的格式(
      YUV\u 420\u 888
      而不是
      JPEG
      )。将访问
      Y
      平面以获取亮度数据。有没有更有效的格式(因为我只是忽略了
      U
      V
      平面)
    • TextureView
      ImageReader
      表面应定期填充,但填充速率不同。由于在
      CameraCaptureSession
      上只能有一个重复的
      CameraRequest
      (可以通过调用
      setRepeatingRequest()
      进行设置),我是否应该定期手动调用
      capture()
      (例如,使用预览请求调用
      setRepeatingRequest()
      与流程请求一起定期提交)
    • 通过发送重新处理的请求以从预览图像中获取要处理的图像,可以提高性能吗?如果是,我怎么做

    我不知道如何帮助您使用灰色通道,我建议您尝试研究YUV格式图像的平面,并尝试从那里获取它

    同时尝试检查CaptureBuilder中可以设置的所有值,也许您可以使用传感器测试模式、颜色校正模式或黑色锁定来实现目标。您可以在中查看所有信息

    关于处理每10帧中的一帧,只需使用以下简单方法放弃process()方法中的帧:

       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();
                }
            }
        }
    
    希望它能帮助你,如果我能在其他方面帮助你,请告诉我