0

私は、カメラから渡されるすべてのYUV画像に対して、ランダムに10ピクセルを選択し、それらが赤か青かを確認するAndroidアプリを開発しています。RGB画像に対してこれを行う方法は知っていますが、YUV形式については知りません。実行時間の制約のため、ピクセルごとにRGB画像に変換できません。

4

3 に答える 3

9

Camera APIのプレビューコールバックを使用していると仮定します。このコールバックでは、フレームごとにデータのbyte[]配列を取得します。

まず、使用するYUVフォーマットを選択する必要があります。NV21をサポートする必要があり、Android3.0以降はYV12が必要です。他のフォーマットのいずれも利用可能であることが保証されていません。したがって、NV21が最も安全な選択であり、デフォルトでもあります。

これらのフォーマットは両方ともYUV4:2:0フォーマットです。色情報は両方の次元で2倍にサブサンプリングされ、画像データのレイアウトは標準のインターリーブRGB形式とはかなり異なります。FourCC.orgのNV21記述には、1つのソースとして、必要なレイアウト情報が含まれています。最初にY平面、次にインターリーブされたUVデータです。ただし、2つのカラープレーンはYプレーンのサイズの1/4しかないため、それらをアップサンプリングする方法を決定する必要があります。最も単純なものが最も近いものです。したがって、サイズ(w、h)の画像からピクセル(x、y)が必要な場合、最近傍アプローチは次のようになります。


Y = image[ y * w + x];
U = image[ w * h + floor(y/2) * (w/2) + floor(x/2) + 1]
V = image[ w * h + floor(y/2) * (w/2) + floor(x/2) + 0]

クロマチャンネル用のより洗練されたアップサンプリング(バイリニア、キュービックなど)も使用できますが、適切なものはアプリケーションによって異なります。

YUVピクセルを取得したら、それを解釈する必要があります。RGBでの操作に慣れている場合は、ウィキペディアでこれらのJPEG変換式を使用してRGB値を取得できます。

または、特にU(Cb)が小さい場合は、V(Cr)の大きな正の値を使用して赤を示すことができます。

于 2012-12-05T04:08:06.547 に答える
1

アンドロイドのonPreviewFrame中にYUV->RGB(画像処理)-> YUVを変換する際のルーベン・スクラトンの答えから ?

YUVの代わりにRGB形式を使用してカメラプレビューを作成できます。

これを試して:

Camera.Parameters.setPreviewFormat(ImageFormat.RGB_565);

于 2012-12-05T05:49:44.927 に答える
0

YUVは単なる別の色空間です。RGB空間と同じように、YUV空間でも赤を定義できます。単純な計算機は、255,0,0(赤)のRGB値がYUV空間で76,84,255のように表示されることを示唆しているので、それに近いものを探してください。

于 2012-12-05T01:19:51.587 に答える