3

我正在尝试在 android 设备上编程光流。我的问题是从相机中获取两个连续的帧。

这是获得一帧的代码。

mCamera.setPreviewCallback(new PreviewCallback() {
        public void onPreviewFrame(byte[] data, Camera camera) {
            synchronized (SampleViewBase.this) {
                mFrame2 = data;
                SampleViewBase.this.notify();
            }
        }
    });     
4

1 回答 1

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格式的帧。我不确定这个类在最新版本中是否仍然可用,但根据我对 Opencv 2.3 的经验,使用它来抓取相机帧比使用 Android 相机要快得多。

于 2012-05-17T15:45:39.950 回答