2012-02-29 15 views
0

私は顔検出と認識ソフトウェアに取り組んでいます...私は顔を検出し、EigenObjectRecognizerを使ってそれらを認識することに成功しました...しかし時々間違った結果を与える...だから私はHaarCascadeオブジェクトを使用して顔のroiを設定しますellipse = new楕円(new pointF(face.rect.X +(face.rect.Width/2)、face.rect)は、楕円にして、背景の効果を無効にできるようにする必要があります。 .Y +(face.rect.Height/2))、新しいSizeF(face.rect.Width - 5、face.rect.Height - 25)、0); ImageFrame.Draw(楕円、新しいBgr(Color.Green)、2);イメージROIをEMGU CV ...の矩形以外の形状に設定していますか?

今では顔の周りに楕円を描くことができます...しかし、この楕円に顔のROIを設定する方法を...

...これで私を助けてください

答えて

1

申し訳ありませんが、あなたは「できます実際にイメージのROIを楕円に設定すると、これは非常に複雑で時間がかかります。

あなたはイメージデータにアクセスするたびに、それが迷子ではないことを確認するために正しい位置と条件を見つけるためにいくつかのforループを通過する必要があります。パフォーマンスへの悪影響は、実装されていないことを意味します。いつでもソースを編集して、必要に応じて設定することができます。

また、ROIの空白イメージを作成し、楕円内に含まれる顔のデータを複数のforループを使ってバイト単位でコピーするのが最善の方法です。条件付きコピーを使用して、肌色のテクスチャのみをコピーすることもできます。

これについて少し助けが必要な場合はお知らせください。しかし結局、黒い背景の顔のイメージで終わるでしょう。すべての顔が黒い背景を持つので、その効果を取り除くことができます。

Image<Gray, byte> mask = new Image<Gray, byte>(img.Width, img.Height); 
:あなたはマスクとビット単位のAND
を使用してそれを行うことができ
1

は、IMGを想定

このことができます

希望、

乾杯、

クリスは、イメージ作成マスク
です

あなたが描いた図形を呼び出すアリ、例えば、楕円のための

CvInvoke.Ellipse(mask,new Point(5,5),new Size(10,20),0,0,360, new MCvScalar(255,255,255),-1,Emgu.CV.CvEnum.LineType.AntiAlias, 0); // -1 fill ellipse 

先:

Image<Gray, byte> dest = new Image<Gray, byte>(img.Width, img.Height); 

ビット単位のAND

dest = img.And(img, mask); 
dest.Save("C:/myshape.jpg") 
関連する問題