2

5人が写っている画像の場合、picture.jpgの緑色の長方形に問題があります。ここではemguCVv2.2を使用しており、ボタンをクリックして起動したときのボタンのコードを使用しています。

Image InputImg = Image.FromFile(@"C:\img\Picture.jpg"); 
Image<Bgr,byte> ImageFrame = new Image<Bgr,byte>(new Bitmap(InputImg));

Image<Gray, byte> grayframe = ImageFrame.Convert<Gray, byte>();
 var faces =  grayframe.DetectHaarCascade(haar, 1.4, 4,
                                    HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                                    new Size(25, 25))[0];
foreach (var face in faces)
            {
                ImageFrame.Draw(face.rect, new Bgr(Color.Green), 3);
            }
CamImageBox.Image = ImageFrame;

各面に緑色の長方形が付いたpicture.jpgが返されるはずです。しかし、そうではありません。理由を教えてもらえますか?ここに間違いはありますか?

ありがとう

4

2 に答える 2

1
 var faces =  grayframe.DetectHaarCascade(haar, 1.4, 4,
                                    HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                                    new Size(25, 25))[0];

と を使用してscaleFactors = 1.4minNeighbors = 4ます。これらのパラメータを調整して結果を確認できる場合があります ( scaleFactors = 1.2?)

ハーカスケードがうまく機能していることを証明するために、ウェブカメラ キャプチャを画像ソースとして使用してみてはいかがでしょうか?

Private void Form1_load(object sender, EventArgs e)
{
    try
    {
        //capture webcam
        Capture grabber = new Capture();
        //test capture frame
        grabber.QueryFrame();
        //trigger event when application is idle
        Application.Idle += new EventHandler(FrameGrabber);
    }
    catch
    {
        MessageBox.Show("Capture fail to start");
    }
}

void FrameGrabber(object sender, EventArgs e)
{
    Image<Bgr,byte> ImageFrame = grabber.QueryFrame().Resize(320,240,Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
    Image<Gray, byte> grayframe = ImageFrame.Convert<Gray, byte>();
    MCvAvgComp[] faces =  grayframe.DetectHaarCascade(haar, 1.4, 4,
                                    HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                                    new Size(25, 25))[0];
    foreach (MCvAvgComp face in faces)
    {
        ImageFrame.Draw(face.rect, new Bgr(Color.Green), 3);
    }
    CamImageBox.Image = ImageFrame;
}

ちなみに、 の戻り値の型はgrayframe.DetectHaarCascadeですMCvAvgComp[][]ので、あなたの場合の面の型は です MCvAvgComp[]

于 2014-02-18T02:50:14.863 に答える
0

1.04 または 1.01 を使用するとよりScaleFactor良い>1.0 but closer to 1結果が得られますが、プロセスが遅くなります。を増やして、minNeighbours誤検知を減らすことができます。最後に、maxSizeパラメーターを使用して、検出されたボックスの最大サイズを制限します。メソッドの定義に従うことができます

public Rectangle[] DetectMultiScale(
    IInputArray image,
    double scaleFactor = 1.1,
    int minNeighbors = 3,
    Size minSize = null,
    Size maxSize = null
)
于 2017-09-13T09:30:23.753 に答える