3

Androidデバイスでオプティカルフローをプログラムしようとしています。私の問題は、カメラから2つの連続したフレームを取得することです。

これが1つのフレームを取得するためのコードです。

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 に答える