如何在Android中从相机捕获连续的两帧图像

3

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

下面是获取一个帧的代码。

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

1
你必须像他们录视频那样去做。 - Ron
是的,我使用OpenCV,并且正在遵循本地代码的教程3。 - h4p0
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相机快得多。


我尝试了,但它不起作用...程序挂起了,我不得不终止它。 - h4p0
就像我之前所说的,我不确定那是否是正确的Java编码方式,但这确实是一种方法。 ;) - MobileCushion
1
谢谢,这解决了问题!我在第一次迭代时没有检查空指针异常! - h4p0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接