0

emgucvを使って人間の身長を推定するプログラムを開発しています。全身検出を使用して人体を検出します。高さを推定するための参照として、検出された長方形のボックスの高さを使用します。

私のプログラムは以下のように書かれています。プログラミング言語として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 に縮小したかったのですが、そうすると、画像ボックスのビューがカメラと同様に半分になりました (つまり、カメラ レンズの半分をカバーしても、画像ボックスの画像には影響しません。

あなたの答えのために前もってThx。私の下手な英語でごめんなさい。

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 に答える