2016-02-14 86 views
1

我是C#中OpenCV/EmguCV的新手。 我试了一个教程(http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3---live-face-detection),用网络摄像头拍摄视频很简单。现在我的问题: 本教程是为EmguCV 2.x编写的。我正在使用EmguCV 3.1(我喜欢使用最新的)。因此,我使用类Mat而不是类Image<>。类Image<>尚未与capture.QueryFrame(); 合作但是,当我来面对检测,教程说我应该使用类CascadeClassifierDetectHaarCascadeCascadeClassifier被接受但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的示例项目。他们正在使用CascadeClassifierCudaCascadeClassifier类。希望这可以帮助。

0

henne959,我对emgu c#也是一个相当新的东西,但是一直在opencv领域。首先要意识到的是它的发展。名称改变。所以保持开放的态度。我最近玩过脸部检测la emgu c#(3.0),并找到你提到的教程。 CascadeClassifier类在那里。但是,我发现哈尔检测器(我想用)表现为一个扩展该类:DetectMultiScale

在我,而研究这个话题指出的联系 - 这两个是我最喜欢的中(对不起 - 我不“T有代表点,包括更多的链接) 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

谢谢!这是我寻找的东西! detecthaarcascade和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); 
    } 
}