2012-08-24 75 views
10

私はAndroid用のアプリを開発しようとしており、カメラからできるだけ高い解像度で圧縮されていない画像を取得する必要があります。 takePictureのrawCallbackとpostviewCallbackを試しましたが、動作していません。OpenCVでAndroidのカメラ解像度を設定する方法は?

今、私はVideoCaptureを使ってOpenCV(バージョン2.4)を使っていますが、デフォルトの960x720に固執しています。サムスンギャラクシーS3という私の携帯電話は、理論的には、Wikipediaによれば、最大8Mpx(写真の場合は3,264×2,448、ビデオの場合は1,920×1,080)を提供することができます。 VideoCapture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH/HEIGHT、いくつかの番号)は、私が見つけた限り黒い画像を返します。

OpenCVまたはAndroid APIを使用して圧縮せずに、より高い解像度を得る方法はありますか?

これが以前に尋ねられた場合は本当に申し訳ありません。私は何日も探していて、何も見つけられませんでした。

ありがとうございました!

編集:私が求めていたものではありませんが、非常に似たようなことがあることがわかりました。setPreviewCallbackを使用してカメラのOnPreviewCallbackを設定すると、カメラ(私は一緒に作業しているS3で少なくとも)。誰かがそれが将来有用であると思った場合に備えて、私はここに残します。

EDIT:以下の解答で部分解を説明します。要約すると、

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

はいくつかの条件で動作します。詳細は下記をご覧ください。

答えて

2

getSupportedPreviewSizesに電話することで、サポートされているカメラのプレビュー画像を取得する必要があります。

この後、方法setPreviewSizeで任意の解像度を設定できます。そして最後にsetParametersを忘れないでください。実際に多くのOpenCV Androidの例にはこの情報が含まれています(sample3を見てください)。

1

誰もが今までこれが重宝場合、私は(部分的)解決策が見つかりました:幅と高さの組み合わせは1でなければならないこと

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

マインド:あなたのVideoCapture変数がVC呼び出された場合、これは動作するはずですがあなたのカメラのためにサポートされている画像フォーマットのうち、それ以外の場合は黒い画像が得られます。それらをCamera.Parameters.getSupportedPictureSizes()で取得できます。

しかし、高解像度を設定すると、YUV変換バッファの容量を超えているように見えます。そのため、まだ苦労しています。 new thread

0

setPreviewSizeで画像の解像度が設定されていません。 setPictureSizeは行います。

関連する問題