2011-02-02 14 views
7

私のiPhoneアプリケーションは、AVFoundationのAVCaptureSessionを使用してカメラからリアルタイムデータをキャプチャします。私はそれを実行時にデリゲートメソッドでそのデータにアクセスし、そこからイメージを作成することができます。これは、CGImage、UIImage、または生データ(CMSampleBufferRef)だけです。画像の輝度/明るさを確認

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

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

ありがとうございます。

答えて

13

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

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

は、輝度チャネルを取得するには、その後、平均値を計算する:あなたは便利なフレームワークを持っていますが、画素強度へのアクセス権を持っていない場合

は、あなたが式を使用することができます。 R、G、Bはそれぞれ赤、緑、青のチャンネルを表します。あなたのカメラがその開口部を修正することにより、明るい/暗いシーンを補償することは可能であることを

EDIT

注意。これはカメラに依存しますが、ほとんどのカメラがこれを行うと思います。そうしないと、写真が飽和(純粋な白)または普通の黒になることがあります。実際に人間の目はdo the same thingです。

画像を見るだけで、暗くて明るい環境にいるかどうかを判断するのは難しいです。その場合は、イメージを超えてカメラに照会する必要があります。理論的には、ドライバを使って直接行うことはできません(おそらくJPEGなど、画像のメタデータを見ることによってEXIFがあります)。

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

+0

ありがとうございます、私は動作しなければならないと思います。私はそれを試して結果をここに投稿します。 – krafter

+0

私の編集したコメントを見てください - 私は潜在的な問題とそれを解決するいくつかの方法を特定しました。 – misha

+0

はい、これは実際には動作します:ピクセル情報を色の強度に分割し、ここに示したようにYを計算します。私は小さな(速い)脈動の平均輝度値がカメラに調整される前に必要なので、この方法はうまくいきます。再度、感謝します。 – krafter

関連する問題