c# OpenCv 2-使用haarcascade模型进行人脸识别

Test:
1. 读取cascade模型文件
2. 对输入的图片进行灰度处理
3. 使用cascade以及模型文件(本例使用的是人脸正面)对图片进行预测

TestCrop:
步骤如Test,截取出人脸照片

haarcascades的模型可以从opencv获得:
https://github.com/opencv/opencv/tree/master/data

...
    public class FRTest
    {

        private CascadeClassifier _cascadeClassifier;
        private Capture _capture;


        public void Test(Bitmap bmp)
        {
            //_capture = new Capture();

            var imageFrame = new Image(bmp); //_capture.QueryFrame();
            _cascadeClassifier = new CascadeClassifier(Application.StartupPath + "/haarcascades/haarcascade_frontalface_default.xml");
            //using (var imageFrame = _capture.QueryFrame().ToImage())
            //{
            if (imageFrame != null)
            {
                var grayframe = imageFrame.Convert();
                var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here
                foreach (var face in faces)
                {
                    imageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them
                }
            }

            ImageViewer.Show(imageFrame);
            //  imgCamUser.Image = imageFrame;                    
        }

        public void TestCrop(Bitmap bmp)
        {
            //_capture = new Capture();

            var imageFrame = new Image(bmp); //_capture.QueryFrame();
            _cascadeClassifier = new CascadeClassifier(Application.StartupPath + "/haarcascades/haarcascade_frontalface_default.xml");
            //using (var imageFrame = _capture.QueryFrame().ToImage())
            //{

            var result = new List>();
            
                var grayframe = imageFrame.Convert();
                var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); //the actual face detection happens here
                foreach (var face in faces)
                {
                    var copyImg = imageFrame.Copy();
                    copyImg.ROI = face;
                    result.Add(copyImg.Copy());
                    //imageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); //the detected face(s) is highlighted here using a box that is drawn around it/them
                }

                ImageViewer.Show(imageFrame);

                foreach (var image in result)
                {
                    ImageViewer.Show(image);
                }
        
            
            
            //  imgCamUser.Image = imageFrame;                    
        }

    }
...

 

你可能感兴趣的:(c#,编程,C#,OpenCV系列)