2011-10-23 64 views
0

我正在創建一個Android應用程序,以使用相機完成一些圖像處理技術,並且需要快速。這是整個系統是如何工作的僞代碼:Android圖像處理快速獲取圖像數據

1. loop while not finished 
    1.1 get image frame 
    1.2 process image for object detection 
2. end loop 

我其實對Camera類的基本問題:

  1. 還預覽從相機感知的圖像比沒有預覽速度更快在所有?前者意味着使用SurfaceView來預覽圖像。
  2. 比方說從takePicture()的方法,可以獲得圖像數據數組沒有預覽?

我真正的問題是,處理圖像後如何快速迭代地獲取圖像數據(如byte[]數組)的最佳方式(如上所述)?

我計劃使用takePicture()方法來獲取圖像數據,但如果這是唯一的方法或者如果有其他更好的方法,我需要您的意見。

+1

你大概可以使用預覽。調用takePicture將在完整的Res中捕獲並在代碼實際獲取之前需要一些時間來處理。有些應用程序使用兩者的組合。對預覽幀執行非常快速的操作,並對從takePicture獲得的幀進行總體昂貴的計算。 –

+0

如何獲得預覽框架?一個簡單的代碼片段將有所幫助。 –

+0

做什麼aleph_null說:) –

回答

2

您可以將SurfaceView設置爲相機的預覽顯示並使用PreviewCallback獲取每個預覽幀的數據。如果你不需要拍攝的高分辨率,這將比使用takePicture更好。換句話說,如果您想要以更快的速度捕捉較低質量的圖像,請使用PreviewCallback ...如果要以非常低的速率捕捉更高質量的圖像,請使用takePicture。

至於你的問題,我不認爲你可以不使用預覽顯示拍照,但我可能是錯的。

class MainActivity extends Activity implements Camera.PreviewCallback, SurfaceHolder.Callback { 
    ... 

    public void surfaceCreated(SurfaceHolder holder) { 
    camera = Camera.open(); 
    camera.setPreviewCallback(this); 
    ... 
    } 

    public void onPreviewFrame(byte[] data, Camera camera) { 
    // image data contained in data... do as you wish 
    } 
}