2015-04-17 199 views
0

我試圖從一款使用OpenCV 2.4.10 for Android的Google Glass中的相機中捕獲高分辨率幀(1280x720)。我在我的Activity中實施了CameraBridgeViewBase.CvCameraViewListener2,並試圖抓取onCameraFrame方法中的框架。到目前爲止,一切正常,我得到一個512x288 Mat對象。在OpenCV for Android上使用onCameraFrame捕捉高分辨率幀?

我的問題是,512x288分辨率不夠高,我所需要的。所以我試圖按照他們在Sample 3中使用OpenCV所做的相同方式設置我的項目:http://goo.gl/iDyqQj。問題是,它只適用於低於512x288的分辨率,只要我將分辨率提高到此級別以上,它就會默認回到512x288(沒有任何通知)。

我發現了一些建議,http://goo.gl/X2wtM4,OpenCV將幀大小限制爲最大的屏幕分辨率。但Google Glass屏幕應該有640x360分辨率?我試圖按照答案中的描述去做,但是當我覆蓋calculateCameraFrameSize並返回一個大於512x288的Size對象時,我得到一個扭曲的幀(但尺寸較大,請參見下文)。

Distorted image

有沒有人對如何捕捉使用OpenCV的對谷歌眼鏡更高的分辨率捕捉一個建議?

回答

1

所以我找到了解決方案。這似乎是兩個不同的問題。正如我在我的問題中想的那樣,您需要在JavaCameraView中覆蓋calculateCameraFrameSize以便能夠獲取比設備屏幕onCameraFrame更高的分辨率。這顯然是OpenCV的設計選擇,從2.4.5版本開始。所以這就是爲什麼我無法獲得更高分辨率的畫面。

儘管我現在可以獲得更高分辨率的畫面,但對於大多數預覽尺寸而言,它仍然會失真。這是GDK中的一個bug,它似乎已經有相當長的一段時間了(從XE10開始,如果我理解正確的話),但仍然不是固定的。幸運的是有一個解決方法!在獲取相機後,使用setPreviewFpsRange手動設置預覽的FPS可避免此問題。

Camera.Parameters params = camera.getParameters(); 
params.setPreviewFpsRange(30000, 30000); 
camera.setParameters(params);