我正在尝试在 Android 设备上编写光流程序。 我的问题是从相机获取两个连续的帧。
这是获取一帧的代码。
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (SampleViewBase.this) {
mFrame2 = data;
SampleViewBase.this.notify();
}
}
});
最佳答案
那么你不能做类似的事情吗:
private byte[] currFrame;
private byte[] prevFrame;
private void copyFrame(byte[] a){
if(a != null) prevFrame = a;
}
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (SampleViewBase.this) {
copyFrame(currFrame);
currFrame = data;
SampleViewBase.this.notify();
}
}
});
我不确定这是正确的 Java 语法,但只需复制 currentFrame
,然后再将 data
分配给它。无论如何,我认为您还可以使用 VideoCapture
类来获取已经采用 Mat
格式的帧。我不确定这个类在最新版本中是否仍然可用,但根据我使用 Opencv 2.3 的经验,使用它来抓取相机帧比使用 Android 相机要快得多。
关于Android如何从相机捕获两个连续的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638650/