emguCV 3.1 – 人脸检测

我是C#中OpenCV / EmguCV的新手。 我尝试了一个教程( http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3—live-face-detection ),并且使用网络摄像头捕获video非常简单。 现在我的问题:本教程是为EmguCV 2.x编写的。 我正在使用EmguCV 3.1(我喜欢使用最新的)。 因此我使用Mat类而不是Image类。 Image类没有使用capture.QueryFrame(); 但是当我开始面对检测时,教程说我应该使用CascadeClassifierDetectHaarCascade类。 接受DetectHaarCascade但不知道DetectHaarCascade 。 在我的5小时!! 搜索我刚刚发现,DetectHaarCascade已经过时,但没有找到任何替代它的方法,而且还不知道HaarCascade.Detect()

我有以下成员:

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

那么,请帮助我:DetectHaarCascade的替代品是什么,我该如何使用它? 有没有EmguCV 3.1的教程?

谢谢!!

要将Mat转换为Image<>使用ToString()方法并使用CascadeClassifier代替HaarCascade

Emgu.CV是一个开源项目。 您可以在sourceforce.com上找到它。 他们在这里也有git存储库 。 您可以在计算机中克隆它。

此存储库还包括示例项目(在Emgu.CV.Example文件夹中)。

ps我无法确切地告诉你你需要哪个类,但是你可以检查名为FaceDetection的示例项目。 他们使用CascadeClassifierCudaCascadeClassifier类。 希望这可以帮助。

henne959,我也是emgu c#的新手 – 但是我已经在opencv领域了解了一下。 首先要意识到的是它的发展。 名字改变了。 所以保持开放的心态。 我最近玩过面部检测一个la emgu c#(3.0)并找到了你提到的教程。 CascadeClassifier类就在那里。 但是,我发现HAAR探测器(我想使用)显示为该类的扩展: DetectMultiScale

在我研究这个主题时我注意到的链接中 – 这两个是我最喜欢的(对不起 – 我没有包含更多链接的代表点) http://fewtutorials.bravesites.com/entries/emgu-cv-c/ level-3c —如何改进面部检测 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))); 

希望这可以帮助!

看一下面部检测 / DetectFace.cs的示例:

重要的是:

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

和:

 IInputArray image, String faceFileName, String eyeFileName, List 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 ); } }