【问题标题】:Incorrect image orientation in Android onPreviewFrame() callback?Android onPreviewFrame() 回调中的图像方向不正确?
【发布时间】:2017-11-29 06:54:21
【问题描述】:

我使用setPreviewCallbackWithBuffer 并在onPreviewFrame() 回调中获取视频帧像素数据。字节数据为YUV NV21格式,旋转90度。我确实知道如何将预览帧从 YUV 转换为 RGB 并将其旋转回来。但是这花了我不需要的时间(大约 20 毫秒),因为我后来有很多图像处理任务。在没有旋转和转换代码的情况下,我应该如何配置相机参数或做其他任何事情来获得正确的方向视频帧?

【问题讨论】:

    标签: android opencv image-processing java-native-interface


    【解决方案1】:

    您基本上可以免费使用Camera.setDisplayOrientation() 修复屏幕上的相机实时预览方向,但不会影响 JPEG 图片或录制的视频。

    其他相关方法有setRotation(),适用于捕获的JPEG图片,setOrientationHint()适用于MediaRecorder。

    但是这些方法都不会影响传递给preview callbacks 的字节数组的顺序。即使是新的 camera2 API 也无法为您解决这个问题。

    如果你需要的话,你不需要通过 RGB 来旋转 NV21 框架。这种字节操作可以比颜色转换快得多,但仍然需要时间。如果您有图像处理(如 标签所暗示的那样),我建议调整图像处理算法以接受旋转图像。如果更改算法部分太麻烦,但您的图像处理程序是用 C++ 编写的,如果您使用 C++ 编写 YUV 旋转代码,您会看到性能提升。

    【讨论】:

      【解决方案2】:

      像这样设置你的相机方向

       private int compensateCameraRotation(int uiRotation) {
      
          int currentDeviceOrientation = 0;
          switch (uiRotation) {
              case (Surface.ROTATION_0):
                  currentDeviceOrientation = 0;
                  break;
              case (Surface.ROTATION_90):
                  currentDeviceOrientation = 270;
                  break;
              case (Surface.ROTATION_180):
                  currentDeviceOrientation = 180;
                  break;
              case (Surface.ROTATION_270):
                  currentDeviceOrientation = 90;
                  break;
              default:
                  break;
          }
      

      当你初始化你的相机时,你可以这样设置

       Camera.Parameters parameters = camera.getParameters();
              parameters.setRotation(compensateCameraRotation(currentDisplay
                      .getRotation()));
      

      currentDisplay 是显示的对象,你可以通过调用得到它

      WindowManager windowManager = (WindowManager) context
                  .getSystemService(Context.WINDOW_SERVICE);
      currentDisplay = windowManager.getDefaultDisplay();
      

      像这样设置你的相机属性我最近遇到了同样的问题,我可以通过设置这样的属性来解决它。

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        相关资源
        最近更新 更多