我正在尝试使用Android的相机和传感器(陀螺仪和加速度计)将视觉 - 惯性状态估算器移植到Android平台。
但是在我完成之后,我发现了一些让我感到非常失望的结果,这已被证实是Camera拍摄的照片时间戳不准确。
为了简化这个问题,我现在尝试将Android相机捕获的所有图片保存到文件中,另一个csv文件包含所有图片文件名及其相应的时间戳。
以下是我的代码的一部分以及我为此问题所做的工作:
使用SurfaceTexture连接相机,我用它来消除在屏幕上显示图片的时间(虽然可能没用),然后将CallbackWithBuffer
添加到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();
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);
请你帮我解决这个问题吗?