9

画像が提供されたら顔の色を検出するアプリケーションを開発しようとしています。OpenCVから顔検出アルゴリズムを見つけて統合することができました。しかし、顔の色を検出できる例やインターフェースは見つかりませんでした。

私は私が提示している論理を持っています。これに利用できるものがあるかどうか教えてください、またはこれのために別の関数を書く必要がありますか?

ロジック:指定された画像領域で、指定された場所で主に繰り返される色の詳細を見つけます。ヒストグラムを調べましたが、どのように役立つかわかりません。

どんな助けでも大歓迎です。

4

3 に答える 3

5

顔(または任意の画像!)の肌の色を検出するには、デフォルトのRGB色空間ではなく、HSV色空間(またはLABなどのより複雑な色空間)を使用することを強くお勧めします。RGB値は強いまたは薄暗い照明や影など。HSVは照明の違いを処理するのにはるかに優れており、使いやすい色値を提供します。

HSVは、色相-彩度-値を意味します。ここで、色相は色です。例:色相0は赤で、色相50は緑の場合があります。彩度は灰色であるため、0に近い彩度値は鈍いまたは灰色に見えることを意味しますが、彩度値200は非常に強い色になる可能性があります(たとえば、色相が0の場合は赤)。また、値はピクセルの明るさであるため、0は黒、255は白です。

したがって、ヒストグラムを使用するかどうかはあなた次第ですが、どちらの方法でも、最初に画像をHSVに変換してから、ヒストグラムまたは単純な検索を使用して最も一般的な色相値を探すことができます。色相の値は、必要な肌の色または色になります。また、もう少し高度なものにしたい場合は、彩度と明るさの値を考慮して、色ではなく実際に黒か白か灰色かを判断できます。

HSVチュートリアルページのOpenCVRGBからHSVへの変換情報がさらにあります。

http://www.shervinemami.co.cc/colorConversion.html

于 2010-09-15T07:26:59.620 に答える
4

ヒストグラムは、画像内にある特定の色のピクセルの量を表します。

たとえば、次の3x3画像があるとします。

3 4 3 1 1 1 2 2 1

ヒストグラムは次のようになります。カウント:4 2 2 1色:1 2 3 4

このことから、最もよく見られる色は色1であることがわかります。非常に類似した色を合計することもおそらく理にかなっています。

たとえば、count(2)= sum(hist(1)、hist(2)、hist(3));を使用します。(その色のピクセル数が履歴になっている)

于 2010-09-13T12:43:41.043 に答える
3

OpenCVにはそのような機能はありません。顔検出は非常に複雑な問題であり、作業を行うアプローチはほとんどありません。たとえば、OpenCVは、そのような最高のアルゴリズムの1つとして知られているViola&Jones顔検出アルゴリズムを実装しています。他のいくつかの実装では、ニューラルネットワークなどを使用します。

そのため、一部の一般的な複雑なシーンでの顔検出の問題は、見た目ほど簡単ではありません。顔の色情報を使うだけでは、安定した結果が得られないのではないかと思います。そのような手法を示唆する論文がいくつかありますが、アルゴリズムが機能する条件はほとんど制限されています(たとえば、画像ごとに1つの顔のみ、または非常に単純な背景)。

于 2010-09-13T17:50:43.860 に答える