2013-10-24 4 views
1

균일 한 피팅 응용 프로그램을 개발 중입니다. 프로그램에서 사진을 찍습니다.이 사진에서 폴로/블라우스 크기 (Small, Medium, Large, X-Large)를 부여합니다.Emgu body measuring

내 문제는 프로그램을 사용하는 사용자의 크기가 Small인지 어떻게 알 수 있습니까? 매질? 또는 Large?

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(); 
       //dlg="Image|*.jpg;*png"; 
       if (dlg.ShowDialog() == DialogResult.OK) 
       { 
        img.ToBitmap().Save(dlg.FileName + ".jpg", System.Drawing.Imaging.ImageFormat.Png); 
        data = dlg.FileName + ".jpg"; 
       } 
       measureImage(); 
      } 
     } 

     void measureImage() 
     { 
      OpenFileDialog dlg2 = new OpenFileDialog(); 
      dlg2.Filter = "Image|*.jpg;*png"; 
      if (dlg2.ShowDialog() == DialogResult.OK) 
      { 
       Image<Bgr, Byte> frame = new Image<Bgr, byte>(dlg2.FileName); 
       Image<Gray, Byte> Gray_Frame = frame.Convert<Gray, Byte>(); 
       //1.985603925968 
       MCvAvgComp[][] LowerBodyDetect = Gray_Frame.DetectHaarCascade(
        LowerBody, 
        1.985603925968, 
        0, 
        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
        new Size()); 

       MCvAvgComp[][] UpperBodyDetect = Gray_Frame.DetectHaarCascade(
        UpperBody, 
        1.3, 
        5, 
        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
        new Size()); 


       //foreach (MCvAvgComp Upp_Body in UpperBodyDetect[0]) 
       //{ 

       // frame.Draw(Upp_Body.rect, new Bgr(Color.Red), 2); 
       // double width = (Upp_Body.rect.Width * 0.264583333); 
       // textBox1.Text = (Convert.ToString(width)); 
       //} 
       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); 
       } 
        //foreach (MCvAvgComp Low_Body in LowerBodyDetect[0]) 
        //{ 
        // frame.Draw(Low_Body.rect, new Bgr(Color.Green), 2); 
        //} 

       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 = false; 

      if (!useCam) 
       measureImage(); 
      else { 
       try 
       { 
        camera = new Capture(); 
       } 
       catch (Exception exc) 
       { 
        MessageBox.Show(exc.Message); 
        return; 
       } 
       Application.Idle += viewImage; 
       captureProcess = true; 
      } 
     } 
    } 
} 

답변

0

첫 번째 문제는 사용자가 다른 웹캠과 뷰의 다양한 각도를 가질 수 있다는 것입니다 :

여기 내 코드입니다.

두 번째 문제는 측정 거리가 멀수록 측정 거리가 더 작아지기 때문에 사용자와 웹캠 간의 거리를 추정해야한다는 것입니다.

나는 허리 직경 등을 측정해야한다고 생각합니다. 사용자에게 2 장의 사진을 찍으라고 요청하는 것이 괜찮습니까? 하나는 카메라를 직접 향하게하고 다른 하나는 프로파일을 향하게합니다. 이것으로부터 당신은 값을 추정 할 수 있습니다 ...

카메라 거리 추정 알고리즘을 검색하십시오.

당신은 모든 크기는 테이블에서 적절한 크기 (소형, 중형를 ...)을 선택할 수 있습니다 측정 한 후, 나는 그 거리를 말을 잊었 죄송합니다 선생님이 고정됩니다

+0

예를 this를 참조하십시오 ... – newbie07