2016-02-14 2 views
1

Я новичок в OpenCV/EmguCV в C#. Я пробовал учебник (http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3---live-face-detection), и видеозахват с помощью веб-камеры был простым. Теперь моя проблема: Учебник был написан для EmguCV 2.x. Я использую EmguCV 3.1 (я люблю использовать новейшие). Поэтому я использовал класс Mat вместо класса Image<>. Класс Image<> не работал с capture.QueryFrame(); Но когда я пришел в лицо, в руководстве говорится, что я должен использовать классы CascadeClassifier и DetectHaarCascade. CascadeClassifier принимается, но DetectHaarCascade не известен. Через 5 часов! поиск Я только узнал, что DetectHaarCascade устарел, но не нашел никаких методов, заменяющих его, кроме HaarCascade.Detect(), который также неизвестен.emguCV 3.1 - обнаружение лица

я следующие assamblies:

using Emgu.CV; 
using Emgu.CV.Structure; 
using Emgu.Util; 
using Emgu.CV.CvEnum; 

Так, пожалуйста, помогите мне: Что такое замена DetectHaarCascade и как его использовать? Есть ли учебник для EmguCV 3.1?

Спасибо!

ответ

0

Emgu.CV - проект с открытым исходным кодом. Вы можете найти его на sourceforce.com. У них также есть git repository here. Вы можете клонировать его на своем компьютере.

Этот репозиторий также включает примеры проектов (в Emgu.CV.Example).

p.s. Я не могу сказать вам, какой именно класс вам нужен, однако вы можете проверить образец проекта под названием FaceDetection. Они используют CascadeClassifier и CudaCascadeClassifier классы. Надеюсь это поможет.

0

henne959, я также довольно новичок в emgu C#, но немного вокруг области opencv. Первое, что нужно понять, это то, что он развивается. Имена меняются. Так что держите открытый ум. Недавно я играл с распознаванием лиц a la emgu C# (3.0) и нашел урок, о котором вы говорили. Класс CascadeClassifier есть. Но я нашел детектор Хаара (что я хотел использовать) проявляется как расширение этого класса: DetectMultiScale

Среди ссылок я отметил, исследуя эту тему - эти два были среди моих любимых (извините - я дон «т есть точки респ включить больше ссылок) http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3c---how-to-improve-face-detection http://blogs.interknowlogy.com/2013/10/21/face-detection-for-net-using-emgucv/

Эти две строки кода, вероятно, поможет вам связать воедино

CascadeClassifier _cascadeClassifier = new CascadeClassifier(@"C:\OPENCV_3.0.0\opencv\build\etc\haarcascades\" + "haarcascade_frontalface_alt2.xml"); 

Rectangle RectFaces = _cascadeClassifier.DetectMultiScale(tMat, 1.03, 1, new Size(tMat.Width/13, tMat.Height/13), new Size((int)((double)tMat.Width/1.05), (int)((double)tMat.Width/1.05))); 

Надежда это помогает!

+0

Спасибо! Это то, что я искал! В моем поиске отсутствует связь между детекторным каскадом и detectmultiscale ... :-D – henne959

2

Для преобразования Mat в Image<> использование ToString() метода и использовать CascadeClassifier вместо HaarCascade.

0

Посмотрите на example for face detection/DetectFace.CS:

Важны:

using Emgu.CV; 
using Emgu.CV.Structure; 

и:

IInputArray image, 
String faceFileName, String eyeFileName, 
List<Rectangle> faces 
using(CascadeClassifier face = new CascadeClassifier(faceFileName)) 
{ 
    using(UMat ugray = new UMat()) 
    { 
     CvInvoke.CvtColor(image, ugray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray); 

     //normalizes brightness and increases contrast of the image 
     CvInvoke.EqualizeHist(ugray, ugray); 

     //Detect the faces from the gray scale image and store the locations as rectangle     
     Rectangle[] facesDetected = face.DetectMultiScale(
      ugray, 1.1, 10, new Size(20, 20)); 

     faces.AddRange(facesDetected); 
    } 
}