11

Android用のアプリを開発しようとしていますが、カメラからできるだけ高い解像度の非圧縮画像を取得する必要があります。takePictureのrawCallbackとpostviewCallbackを試しましたが、機能しません。

現在、VideoCaptureを使用してOpenCV(バージョン2.4)を試していますが、デフォルトの960x720のままです。これは、必要なものには不十分です。私の携帯電話であるSamsungGalaxyS3は、理論的には最大8Mpx(Wikipediaによると、写真の場合は3,264×2,448、ビデオの場合は1,920×1,080)を提供できます。VideoCapture.set(Highgui.CV_CAP_PROP_FRAME_WIDTH / HEIGHT、いくつかの数値)は、私が見つけた限り、カメラが黒い画像を返すようにします。

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

これまでに質問されたことがある場合は、本当に申し訳ありません。私は何日も探していましたが、何も見つかりませんでした。

お時間をいただきありがとうございます!

編集:それは私が求めていたものとは正確には異なりますが、非常によく似た方法があることがわかりました。setPreviewCallbackを使用してカメラにOnPreviewCallbackを設定すると、カメラから生の画像データを取得します(少なくとも私が使用しているS3では)。将来誰かが役立つと思った場合に備えて、ここに残しておきます。

編集:部分的な解決策は、以下の回答で説明されています。総括する、

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

いくつかの条件下で動作します。詳細については、以下を参照してください。

4

3 に答える 3

2

を呼び出して、サポートされているカメラプレビューの解像度を取得する必要がありますgetSupportedPreviewSizes

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

于 2012-08-25T15:03:10.720 に答える
1

誰かがこれが便利だと思った場合に備えて、私は(部分的な)解決策を見つけました:VideoCapture変数がvcと呼ばれる場合、これは機能するはずです:

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

幅と高さの組み合わせは、カメラでサポートされている画像形式の1つである必要があります。そうでない場合、画像は黒くなります。それらはCamera.Parameters.getSupportedPictureSizes()から取得できます。

しかし、高解像度を設定すると、YUV変換バッファーの容量を超えているように見えるので、私はまだそれに苦労しています。すべてを明確にするために、そのための新しい別の質問をします:新しいスレッド

于 2012-08-24T09:24:39.823 に答える
0

setPreviewSizeは画像の解像度を設定しません。setPictureSizeは行います。

于 2014-11-18T22:18:06.083 に答える