我有一個應用程序,它可以進行相機預覽,對每一幀執行一些基本的圖像處理功能(例如邊緣檢測,顏色變化,圖像扭曲等),並將修改後的幀顯示在屏幕上「即時的」。類似於Android Market中的「Paper Camera」應用程序。Android:實時圖像處理
我的方法的總結:
1:創建一個的FrameLayout兩個重疊的次數:
甲SurfaceView傳遞給Camera.setPreviewDisplay()。 (傳遞null會阻止在某些設備上啓動攝像頭預覽 - 在Android 4.0之前,opencv會使用它來執行此操作)。
一個名爲「LiveView」的類,它擴展了View並實現了Camera.PreviewCallBack。該視圖從相機接收幀,並在修改後顯示幀(例如邊緣檢測)。該視圖位於SurfaceView的頂部。
2:我請Camera.setPreviewCallbackWithBuffer(),使得幀被髮送到我的實時查看
3:)的實時查看的在onPreviewFrame(我走捕獲的幀(字節[])從YUV轉換爲RGB,並執行圖像處理功能,並調用postInvalidate()(的YUV2RGB轉換和圖像處理是在本機代碼執行)
4:在實時查看的的OnDraw()方法,創建一個從修改的RGB幀(byte [])中獲取位圖,並將該位圖繪製到畫布。
此作品(5fps的和在各種設備之間10fps的),但我想聽聽別人怎麼接觸過這個問題,如何可以改善。特別是:
- 我會通過擴展GLSurfaceView而不是View來創建LiveView類來獲得任何性能嗎?
- 這聽起來非常低效,因爲每個框架都要更新兩個曲面。有其他選擇嗎?
- 要更有效地做到這一點,我應該在本機級別訪問攝像機嗎? - 我相信OpenCV採用這種方法?
非常感謝