我正在尝试使用 Android 的相机和传感器(陀螺仪和加速度计)将视觉惯性状态估计器移植到 Android 平台。
但是在我完成之后,我才发现结果让我很失望,已经确认是Camera拍摄的照片的时间戳不准确。
为了简化这个问题,我现在尝试将 Android 相机拍摄的所有图片保存到文件中,另一个 csv 文件包含所有图片文件名及其相应的时间戳。
以下是我的代码的一部分以及我为这个问题所做的工作:
用 SurfaceTexture 连接相机,我用它来消除在屏幕上显示图片的时间(虽然这可能没用),并添加一个
CallbackWithBuffer
tothis
,它将onPreviewFrame
在捕获新图片时调用mCamera.setPreviewTexture(surfaceTexture); int buffersize = mFrameWidth * mFrameHeight * ImageFormat.getBitsPerPixel(previewFormat) * 8; previewBuffer = new byte[buffersize]; mCamera.addCallbackBuffer(previewBuffer); mCamera.setPreviewCallbackWithBuffer(this); mCamera.startPreview();
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);
你能帮我解决这个问题吗?