我正在尝试在Android设备上编程光流。 我的问题是从相机连续两帧。
这是获得一帧的代码。
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (SampleViewBase.this) {
mFrame2 = data;
SampleViewBase.this.notify();
}
}
});
答案 0 :(得分:1)
你不能这样做:
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
类来获取{{1}}格式的帧。我不确定这个类在最新版本中是否仍然可用,但根据我使用Opencv 2.3的经验,使用它来抓取相机帧比使用Android相机要快得多。