Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EmguCv HaarCascade测量特定车身零件_C#_Winforms_Emgucv - Fatal编程技术网

C# 使用EmguCv HaarCascade测量特定车身零件

C# 使用EmguCv HaarCascade测量特定车身零件,c#,winforms,emgucv,C#,Winforms,Emgucv,我正试图开发一个程序来测量用户的肩膀宽度,我遇到了很多问题,我不知道如何解决 当我使用笔记本电脑的网络摄像头拍摄用户的全身照片时,系统给出的测量结果不正确 我试着用相同的距离拍摄同一用户的3张照片,等等。但当我开始测量时,测量结果不一致 这是我的密码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using S

我正试图开发一个程序来测量用户的肩膀宽度,我遇到了很多问题,我不知道如何解决

  • 当我使用笔记本电脑的网络摄像头拍摄用户的全身照片时,系统给出的测量结果不正确
  • 我试着用相同的距离拍摄同一用户的3张照片,等等。但当我开始测量时,测量结果不一致
  • 这是我的密码:

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using Emgu.CV;
        using Emgu.CV.Structure;
        using Emgu.Util;
    
        namespace fitting
        {
            public partial class Form1 : Form
            {
                HaarCascade UpperBody = new HaarCascade("haarcascade_mcs_upperbody.xml");
                HaarCascade LowerBody = new HaarCascade("haarcascade_lowerbody.xml");
            Capture camera;
            bool captureProcess = false;
            Image<Bgr, Byte> img;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            void viewImage(object sender, EventArgs e)
            {
                img = camera.QueryFrame();
                if (img == null)
                    return;
                CamImageBox.Image = img;
            }
    
            private void btnCapture_Click(object sender, EventArgs e)
            {
                if (captureProcess == true)
                {
                    string data;
    
                    Application.Idle -= viewImage;
                    captureProcess = false;
                    SaveFileDialog dlg = new SaveFileDialog();
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        img.ToBitmap().Save(dlg.FileName + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                        data = dlg.FileName + ".bmp";
                    }
                    measureImage();
                }
            }
    
            void measureImage()
            {
                OpenFileDialog dlg2 = new OpenFileDialog();
                dlg2.Filter = "Image|*.Bmp";
                if (dlg2.ShowDialog() == DialogResult.OK)
                {
                    Image<Bgr, Byte> frame = new Image<Bgr, byte>(dlg2.FileName);
                    Image<Gray, Byte> Gray_Frame = frame.Convert<Gray, Byte>();
    
    
    /////////////////////////LOWER BODY DETECTION////////////////////////////////
                    MCvAvgComp[][] LowerBodyDetect = Gray_Frame.DetectHaarCascade(
                        LowerBody,
                        1.985603925968,
                        0,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new Size());
    
    ///////////////////HERE IS THE UPPER BODY DETECTION/////////////////////////
    
                    MCvAvgComp[][] UpperBodyDetect = Gray_Frame.DetectHaarCascade(
                        UpperBody,
                        1.3,
                        5,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new Size());
    
    
    /////////////////////////DRAWING OF RECTANGLE ON DETECTED UPPER BODY///////////////////
                    try
                    {
                        frame.Draw(UpperBodyDetect[0][0].rect, new Bgr(Color.Red), 2);
                        double width = (UpperBodyDetect[0][0].rect.Width);
                        textBox1.Text = (Convert.ToString(width));
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
    ///////////////////////DRAWING OF RECTANGLE ON DETECTED LOWER BODY///////////////////
                    try
                    {
                        frame.Draw(LowerBodyDetect[0][0].rect, new Bgr(Color.Green), 2);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                    CamImageBox.Image = frame;
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                bool useCam = true;
    
                if (!useCam)
                    measureImage();
                else {
                    try
                    {
                        camera = new Capture();
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message);
                        return;
                    }
                    Application.Idle += viewImage;
                    captureProcess = true;
                }
            }
        }
    } 
    
    使用系统;
    使用System.Collections.Generic;
    使用系统组件模型;
    使用系统数据;
    使用系统图;
    使用System.Linq;
    使用系统文本;
    使用System.Windows.Forms;
    使用Emgu.CV;
    使用Emgu.CV.Structure;
    使用Emgu.Util;
    名称空间拟合
    {
    公共部分类Form1:Form
    {
    HaarCascade UpperBody=新的HaarCascade(“HaarCascade_mcs_UpperBody.xml”);
    HaarCascade LowerBody=新的HaarCascade(“HaarCascade_LowerBody.xml”);
    摄像机;
    bool captureProcess=false;
    图像img;
    公共表格1()
    {
    初始化组件();
    }
    void viewImage(对象发送方,事件参数e)
    {
    img=camera.QueryFrame();
    如果(img==null)
    返回;
    CamImageBox.Image=img;
    }
    私有void btnCapture_单击(对象发送者,事件参数e)
    {
    如果(captureProcess==true)
    {
    字符串数据;
    Application.Idle-=viewImage;
    captureProcess=false;
    SaveFileDialog dlg=新建SaveFileDialog();
    if(dlg.ShowDialog()==DialogResult.OK)
    {
    img.ToBitmap().Save(dlg.FileName+“.bmp”,System.Drawing.Imaging.ImageFormat.bmp);
    数据=dlg.FileName+“.bmp”;
    }
    measuremage();
    }
    }
    void measuremage()
    {
    OpenFileDialog dlg2=新建OpenFileDialog();
    dlg2.Filter=“Image |*.Bmp”;
    if(dlg2.ShowDialog()==DialogResult.OK)
    {
    图像帧=新图像(dlg2.FileName);
    Image Gray_Frame=Frame.Convert();
    /////////////////////////下半身检测////////////////////////////////
    MCvAvgComp[]]LowerBodyDetect=灰色\u帧。DetectHarcascade(
    下体,
    1.985603925968,
    0,
    Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_prunting,
    新尺寸());
    ///////////////////这是上身检测/////////////////////////
    MCvAvgComp[][]上部车身检测=灰色(帧)。检测ARCASCADE(
    上身,
    1.3,
    5.
    Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_prunting,
    新尺寸());
    /////////////////////////在检测到的上半身上绘制矩形///////////////////
    尝试
    {
    frame.Draw(UpperBodyDetect[0][0].rect,新Bgr(Color.Red),2);
    double width=(UpperBodyDetect[0][0]。矩形宽度);
    textBox1.Text=(Convert.ToString(宽度));
    }
    捕获(例外e)
    {
    MessageBox.Show(e.Message);
    }
    ///////////////////////在检测到的下半身上绘制矩形///////////////////
    尝试
    {
    frame.Draw(LowerBodyDetect[0][0].rect,新Bgr(Color.Green),2);
    }
    捕获(例外e)
    {
    MessageBox.Show(e.Message);
    }
    CamImageBox.Image=帧;
    }
    }
    私有void Form1\u加载(对象发送方、事件参数e)
    {
    bool-useCam=true;
    如果(!useCam)
    measuremage();
    否则{
    尝试
    {
    照相机=新捕获();
    }
    捕获(异常exc)
    {
    MessageBox.Show(exc.Message);
    返回;
    }
    Application.Idle+=viewImage;
    captureProcess=true;
    }
    }
    }
    }