2012-05-17 112 views
3

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

这就是获得一帧的代码。

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

您使用OpenCV吗? – MobileCushion

+1

你必须这样做,就像他们做录像.. – Ronnie

+0

是的,我使用OpenCV,我正在按照本地代码的教程3。 – h4p0

回答

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相机要快得多。

+0

我试过了,但它不起作用...程序挂起,我不得不终止它 – h4p0

+0

正如我所说,我不确定这是适当的Java编码,但它是一种方法。 ;) – MobileCushion

+1

谢谢你,这个伎俩!在第一次迭代中,我没有检查到空指针异常! – h4p0

相关问题