2

我正在尝试使用 Android 的相机和传感器(陀螺仪和加速度计)将视觉惯性状态估计器移植到 Android 平台。

但是在我完成之后,我才发现结果让我很失望,已经确认是Camera拍摄的照片的时间戳不准确。

为了简化这个问题,我现在尝试将 Android 相机拍摄的所有图片保存到文件中,另一个 csv 文件包含所有图片文件名及其相应的时间戳。

以下是我的代码的一部分以及我为这个问题所做的工作:

  1. 用 SurfaceTexture 连接相机,我用它来消除在屏幕上显示图片的时间(虽然这可能没用),并添加一个CallbackWithBufferto this,它将onPreviewFrame在捕获新图片时调用

    mCamera.setPreviewTexture(surfaceTexture);
    int buffersize = mFrameWidth * mFrameHeight
                    * ImageFormat.getBitsPerPixel(previewFormat) * 8;
    previewBuffer = new byte[buffersize];
    mCamera.addCallbackBuffer(previewBuffer);
    mCamera.setPreviewCallbackWithBuffer(this);
    mCamera.startPreview();
    
  2. onPreviewFrame,把所有图片和时间戳放到一个缓冲区,用另一个线程保存图片。outImage是包含所有图片文件名及其对应时间戳的csv文件,而真正保存图片的过程是在另一个过程中。第一行是我获取相机拍摄的图片时间戳的地方

    long realTime = SystemClock.elapsedRealtimeNanos();
    String fileName = "picture_" + realTime + ".jpg";
    outImage.println(realTime + "," + fileName);
    synchronized (buffer) {
        buffer.add(new Pair<String, byte[]>(fileName, data));
    }
    camera.addCallbackBuffer(previewBuffer);
    

你能帮我解决这个问题吗?

4

0 回答 0