1

私は、携帯電話のカメラからの画像をリアルタイムで処理することに依存するAndroidアプリのアイデアを持っています(Word Lensのような処理を考えてみてください)。静的画像で実行してPythonでアルゴリズムのプロトタイプを作成したいのですが、静的画像をAndroid携帯カメラから通常受信される形式と一致させたいです(RGB用の実用的なアルゴリズムを作成したくない次に、AndroidのカメラAPIがHSVバイト配列を提供することを確認します)。2つの質問:

  1. フォーマットは何ですか?(または、Androidハードウェアが異なるため、少なくとも最も一般的です)
  2. Linuxでjpgテスト画像をこの形式に変換するにはどうすればよいですか?
4

1 に答える 1

1

すべてのAndroidカメラは、setPreviewCallbackによって有効化されるアプリケーションバウンドコールバックのために、2つのYUV形式、NV21、およびYV12(setPreviewFormatのドキュメントを参照)をサポートする必要あります

一部のデバイスは追加のフォーマット(RGB、YUYV2など)をサポートしている場合がありますが、これら2つは必須であるため、いずれかを選択することをお勧めします。YV12は、問題のハードウェアによって異なりますが、効率が高くなる可能性が高くなります。

2つ目については、 ImageMagickなどのユーティリティプログラムを使用して色変換を行うことができますが、これらの形式に関するもう1つのポイントは、クロマ(カラー)プレーン用にサブサンプリングされていることです。NV21とYV12はどちらも、カラーフォーマットを両方の次元で2倍ダウンサンプリングします。たとえば、画像サイズが640x480の場合、Y(輝度)チャネルは640x480になりますが、UチャネルとVチャネルはどちらも320x240にすぎません。ほとんどの画像ライブラリはその種の形式を公開しないため、おそらくこのサブサンプリングを自分で行う必要があります(JPEG画像は通常、同様のサブサンプリングされたYUV形式で保存されますが、ほとんどのライブラリは、提供する前に完全なRGBに変換し直しますデータ)。

編集:追記

または、アルゴリズムがGPUで適切に機能する場合は、カメラからのsetPreviewTextureパスを使用できます。これにより、GPUシェーダーで画像データを処理できます。その場合、データは常にRGBであり、OpenGL2.0のGLSLシェーダーでテクスチャとしてアクセスされます。

于 2012-07-22T00:16:18.420 に答える