首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >faceDetection EmguCV

faceDetection EmguCV
EN

Stack Overflow用户
提问于 2013-01-02 23:08:28
回答 2查看 1.7K关注 0票数 2

当picture.jpg上有5个人的照片时,我在给出绿色矩形的时候遇到了问题。我在这里使用的是emguCV v2.2,当我单击并触发按钮时,该按钮的代码。

代码语言:javascript
复制
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。但事实并非如此。我能知道为什么吗?这里有什么错误吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-02-18 10:50:15

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

您正在使用scaleFactors = 1.4minNeighbors = 4,您可以调整这些参数并检查结果(scaleFactors = 1.2?)

为了证明你的haarcascade运行良好,也许你可以尝试使用网络摄像头捕获作为你的图片来源?

代码语言:javascript
复制
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[][],因此您的例子中的faces类型是MCvAvgComp[]

票数 1
EN

Stack Overflow用户

发布于 2017-09-13 17:30:24

ScaleFactor应该是>1.0 but closer to 1,所以您可以使用1.04或1.01来获得更好的结果,但这会使过程变慢。你可以增加minNeighbours,这样你就可以减少假阳性。最后使用maxSize参数来限制检测到的框的最大尺寸。您可以遵循该方法的定义

代码语言:javascript
复制
public Rectangle[] DetectMultiScale(
    IInputArray image,
    double scaleFactor = 1.1,
    int minNeighbors = 3,
    Size minSize = null,
    Size maxSize = null
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14124293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档