openCVは色の空間を変えて、人体の肌色の模型を創立します。

1831 ワード

台湾人のブログ、msは
http://finalevil.blogspot.com/search/label/0.4%EF%BC%9A%E7%A8%8B%E5%BC%8F-OpenCV%E 5%AD% B 8%E 7%BF%92%E 7%AD% 86%E 8%A 8%98
 
[Introduction]I find some questions when using opencv today.The color-space convert function cvCvCvColor seems problematic.I'm not sure.But when I convert the RGB to YCrCb,the reult has error.今日は単純なSdanceモデルで作成できます。この色は人の肌ですか?それとも人の肌ではないですか?この数学モデルを作るための様々な方法があります。このように、皮膚の色分布をGussian Modal(ガウス分布モデル)Face detection in色images using AdaBoost algorithm based on skingで説明します。またはこのFuzy System Learned Through Fuzy Custering and Support Vector Machine for Human Skin Color SegmentationはFuzyとSupport Vector Machineで画像の人間の皮膚の部分をカットします。しかし、これらの方法はいずれも複雑すぎて、顔検出と認識の効率に影響しやすく、人間の顔検出がリアルタイムシステムで動作できない問題をもたらしています。したがって,これらの複雑な数学モデルは現在考慮されていない。この論文の作り方によって、Face Detection Color Images using Wavelet Packet Analysisはとりあえず簡単な不等式を使って肌の色の切り取りに代えてみます。不等式の内容は以下の通りです。  OpenCVの焦点については、まずRGBの色を光照射の明るさに敏感でないYCrCb空間に変換します。だから、OpenCVのcvCvtColor方法を直接使います。同じYCrCbでも第二のアルゴリズムがありますか?!だから見つけた肌の色の位置は全部正しくないです。OpenCV中国語フォーラムを参照して、cvCvtColorの空間変換を説明します。Y=0.299*R+0.517*G+0.14*B Cr=(R-Y)*0.713+128 Cb=(B-Y)*0.544+128という問題ですが、蹴り出した問題は上の式が間違っています。後に別の論文で提供する公式に変えます。しかし、どうやって使うかを説明します。興味のある友達は蹴り飛ばしてみてもいいです。正常なworkかどうかはまずcv LoadImageでpImg //
IplImage* pCh[3];
for(int i=0;i<3;i++)
    pCh[i]=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);

// pImg , YCrCb , pYcc
cvCvtColor(pImg,pYcc,CV_BGR2YCrCb);

// , pYcc Y,Cb,Cr , ,
// pCh[0],pCh[1],pCh[2]
cvSplit(pYcc,pCh[0],pCh[1],pCh[2],0);
にロードしてください。だからpCh[0],pCh[1],pCh[2]はそれぞれY,Cr,Cbの数値を表しています。
とにかく最後に結果があります。以下は原図です
 
皮膚の色として認定された部分は下図のように保存されています。
結論:OpenCVを使う時は注意してください。彼は間違っていないかもしれませんが、あなたが望んだのではないかもしれません。