0

全て、

Emgu CV の最新バージョンで顔検出の例を試しました。私のプログラムはうまく動作しますが、画像またはウェブカメラのライブ キャプチャから顔を取得できません。

私のOSはWindows 8 Enterprise x64です。私のIDEはVS2012です。

ところで、HaarCascade と CascadeClassifier も試しました。どちらも結果を得ることができません。返される変数の値は常に {Emgu.CV.Structure.MCvAvgComp[0]} になります。

cap = new Capture(0);
// adjust path to find your xml
//ccf = new CascadeClassifier("D:\\haarcascade_frontalface_alt_tree.xml");
haar = new HaarCascade("D:\\haarcascade_frontalface_alt_tree.xml");
Image inputImg = Image.FromFile(@"D:\1.jpg");

Image<Bgr, byte> imageFrame = new Image<Bgr, byte>(new Bitmap(inputImg));

if (imageFrame != null) {
    Image<Gray, byte> grayFrame = imageFrame.Convert<Gray, byte>();

var faces = grayFrame.DetectHaarCascade(haar, 1.1, 10, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20))[0];

foreach (var face in faces) {
                imageFrame.Draw(face.rect, new Bgr(Color.Green), 3);
            }
}
pictureBox1.Image = imageFrame.ToBitmap();

何か考えや助けはありますか?どうもありがとうございました。

解決しました ありがとうございます。

4

1 に答える 1

0

Haar カスケード法を使用して検出された歩行者に同様のプログラムを実行しました。次のコードが何かに役立つかどうかを確認してください。

private void Haar(object sender, EventArgs arg)
        {

            Image<Bgr, Byte> frame;
            Image<Gray, Byte> Gray_frame;

            HaarCascade UpperBody = new HaarCascade("haarcascade_mcs_upperbody.xml");
            HaarCascade LowerBody = new HaarCascade("haarcascade_lowerbody.xml");
            HaarCascade FullBody = new HaarCascade("haarcascade_lowerbody.xml");

            try
            {
                frame = _capture.QueryFrame();

                Gray_frame = frame.Convert<Gray, byte>();

                double fps = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
                //Gray_frame = foreground(frame);

                if (inteiro == false)
                {

                    MCvAvgComp[] cima = UpperBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));

                    MCvAvgComp[] baixo = LowerBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));


                    foreach (MCvAvgComp body in cima)
                    {
                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                    foreach (MCvAvgComp body in baixo)
                    {
                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                }

                //Full Body

                if (inteiro == true)
                {

                    MCvAvgComp[] full = FullBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));


                    foreach (MCvAvgComp body in full)
                    {

                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                }

                this.Text = cout.ToString();
                imageBox1.Image = Gray_frame;
            }
            catch { }
        }
于 2013-07-16T14:04:53.297 に答える