0

我正在开发使用 emgucv 估计人类身高的程序。我使用 fullbodydetection 来检测人体。我使用检测到的矩形框的高度作为估计高度的参考。

我的程序编写如下。我使用 vb 作为我的编程语言

    imgcolor = ImgCap.QueryFrame.Flip(Emgu.CV.CvEnum.FLIP.HORIZONTAL)
    imggray = imgcolor.Convert(Of Gray, Byte)()

    If TextBox1.Text = "Human Detected" Then
        TextBox2.Text = Height
    Else
        TextBox2.Text = 0


    End If

    TextBox1.Text = "Human Detected"


    For Each body As MCvAvgComp In imggray.DetectHaarCascade( _
    objecttodetect, _
    1.2, _
    1, _
         CvEnum.HAAR_DETECTION_TYPE.FIND_BIGGEST_OBJECT, _
    New Size(50, 50))(0) 
        imgcolor.Draw(body.rect, New Bgr(Color.Blue), 3)


        Height = body.rect.Height

我的问题是

1)当我调试全身检测不准确时。我应该怎么做才能使检测结果准确?

2)我的图像框的当前大小是 640,480。我想将宽度减小到 320,但是当我这样做时,图像框中的视图和我的相机一样减半(这意味着即使我盖住了相机镜头的一半,它也不会影响图像框中的图像。

提前谢谢您的回答。对不起我糟糕的英语。

4

1 回答 1

0

我对问题 1 没有很好的答案,但我可以回答问题 2:

你需要看看SetZoomScale方法ImageBox。如果图像太大,我编写了这个方法来自动缩放 ImageBox。它在 C# 中,但您应该能够将其转换为 VB。

private void ScaleImageBox(Emgu.CV.UI.ImageBox imgBox, Size imgSize)
{
    float scaleFactor = 1;
    if (imgSize.Width > imgBox.Width || imgSize.Height > imgBox.Height)
    {
        float widthFactor = imgBox.Width / (float)imgSize.Width;
        float heightFactor = imgBox.Height / (float)imgSize.Height;
        scaleFactor = Math.Min(widthFactor, heightFactor);
    }
    imgBox.SetZoomScale(scaleFactor, new Point(0, 0));
}
于 2013-04-25T12:01:39.453 回答