2016-06-12 5 views
1

В настоящее время я пытаюсь написать небольшую программу, определяющую грани.Вырезать изображение EmguCV

Я хочу вырезать серого кадра для обнаружения на куски размера прямоугольников обнаруженных лиц.

Это мой метод работы:

public List<PreviewImage> GetDetectedSnippets(Capture capture, ProcessType processType) 
{ 
    var mat = capture?.QueryFrame(); 

    var imageList = new List<PreviewImage>(); 
    if (mat == null) 
     return imageList; 

    var imageframe = mat.ToImage<Bgr, byte>(); 
    var grayframe = imageframe.Convert<Gray, byte>(); 

    Rectangle[] faces = null; 

    try 
    { 
     switch (processType) 
     { 
      case ProcessType.Front: 
       { 
        faces = _cascadeFrontDefault.DetectMultiScale(grayframe, 1.25, 10, Size.Empty); 

       } 
       break; 

      case ProcessType.Profile: 
       { 
        faces = _cascadeProfileFace.DetectMultiScale(grayframe, 1.25, 10, Size.Empty); 
       } 
       break; 

      default: 
       { 
        return imageList; 
       } 
     } 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine("Could not process snapshot: " + ex); 
     return imageList; 
    } 


    foreach (var face in faces) 
    { 
     var detectedImage = imageframe.Clone(); 
     detectedImage.Draw(face, new Bgr(Color.BlueViolet), 4); 


     var detectedGrayframe = grayframe.GrabCut(face, 1); // This isn't working. Here should the grayframe be cutted into a smaller piece. 

     imageList.Add(new PreviewImage(detectedImage, detectedGrayframe)); 
    } 

    return imageList; 
} 

И это класс previewImage:

public class PreviewImage 
{ 
    public Image<Bgr, byte> Original { get; } 
    public Image<Gray, byte> Grayframe { get; } 

    public PreviewImage(Image<Bgr, byte> original, Image<Gray, byte> grayframe) 
    { 
     Original = original; 
     Grayframe = grayframe; 
    } 
} 

Как можно вырезать grayframe в кусок с размером данного прямоугольника?

ответ

1

Это сделает работу:

grayframe.ROI = face; 
var detectedGrayframe = grayframe.Copy(); 
grayframe.ROI = Rectange.Empty; 
+0

Это работало огромное спасибо! – chris579

Смежные вопросы