9

私の iPhone アプリケーションは、AVFoundation の AVCaptureSession を使用してカメラからリアルタイム データをキャプチャします。実行時にデリゲート メソッドでそのデータにアクセスし、そこからイメージを作成できます。CGImage、UIImage、または単なる生データ (CMSampleBufferRef) のいずれかです。

私がやろうとしているのは、そのデータ(画像)の輝度、明るさを計算することです。または、入力光の明るさを示す他の値にすることもできます。

この値を取得する標準的な方法はありますか? おそらくOpenGLを使用しています。

前もって感謝します。

4

1 に答える 1

15

画像をYUV 形式に変換し、輝度チャネルの平均を計算するだけです。色変換は典型的な操作であり、まともな画像処理フレームワークはそれをサポートしています。たとえば、OpenCV(OpenGLと言いましたが、実際には画像処理とは何の関係もありません。OpenCVを意味していると思います)にはCvtColorがあります。

そのようなフレームワークが手元になくても、ピクセル強度にアクセスできる場合は、次の式を使用できます。

Y' = 0.299*R + 0.587*G + 0.144*B

ルマ チャネルを取得し、平均を計算します。R、G、B は、それぞれ赤、緑、青のチャンネルを表します。

編集

絞りを変更することで、カメラが明るい/暗いシーンを補正する可能性があることに注意してください。これはカメラに依存しますが、ほとんどのカメラがこれを行うと思います.そうしないと、写真が飽和した(純粋な白)または真っ黒になる可能性があります.どちらの場合も役に立たない. 人間の目も実際に同じことをします。

欠点は、画像を見ただけでは暗い環境にいるか明るい環境にいるかを判断するのが難しいことです. その場合、画像を超えてカメラに問い合わせる必要があるかもしれません。理論的には、これはドライバーを介して直接行う (可能性は低い) か、画像のメタデータ (たとえば、JPEG の場合、EXIFがあります) を調べることによって行うことができます。

最後に、明るさを正確に知りたいとは言っていません。シーン全体なら、平均で十分でしょう。それがシーンの一部である場合は、もう少し賢くする必要があるかもしれません。その場合はお知らせください。

于 2011-02-02T15:45:46.193 に答える