2012-08-24 136 views
10

我正在嘗試爲Android開發一個應用程序,並且我需要從相機獲得分辨率儘可能高的未壓縮圖片。我試圖takePicture的rawCallback和postviewCallback,但它們不起作用。如何使用OpenCV在Android中設置攝像頭分辨率?

現在,我使用VideoCapture的OpenCV(2.4版本)很努力,但我卡在默認960x720,這是可憐我需要什麼;而我的手機,三星Galaxy S3,理論上能夠提供高達8Mpx(根據維基百科,圖片爲3,264×2,448,視頻爲1,920×1,080)。 VideoCapture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH/HEIGHT,某個數字)使攝像機返回一個黑色圖像,就我所知。

有沒有什麼辦法,以獲得更高的分辨率,無論是通過OpenCV的或與Android API,無需壓縮?

我真的很抱歉,如果這已問過;我一直在尋找幾天,而我一無所獲。

謝謝你的時間!

編輯:雖然它不完全是我問的,我發現有一種方法可以做非常相似的事情:如果您設置相機的OnPreviewCallback,使用setPreviewCallback,您可以從相機(至少在我正在使用的S3中)。我留在這裏以防有人在將來發現它有用。

編輯:的部分解決方案將在下面的答案說明。綜上所述,

vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth); 
vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight); 

在某些條件下工作;請參閱下面的進一步細節。

回答

1

萬一有人曾經認爲這是有用的,我發現了一個(部分)解決方案:如果您VideoCapture變量稱爲VC,這應該工作:

vc.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, desiredFrameWidth); 
vc.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, desiredFrameHeight); 

記住,寬度和高度的組合必須是一個您的相機支持的圖片格式,否則它只會得到一個黑色的圖像。您可以通過Camera.Parameters.getSupportedPictureSizes()獲取這些內容。

但是,設置高分辨率出現超過YUV轉換緩衝區的容量,所以我仍然與掙扎。我要爲此做一個單獨的新問題,以便讓一切更加清晰:new thread

0

setPreviewSize不設置圖片分辨率。 setPictureSize的確。

相關問題