OpenCvSharp 图片人脸检测 总结

摘要:
。 publicpartialclassForm2:表单{publicForm2(){InitializeComponent();}privatevoidbutton1_单击(objectsender,EventArgse){varsrcImage=newMat();varopenFileDialog=newOpenFileDialog());openFileDialog.Filter=“I

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var srcImage = new Mat();
            var openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Image Files | *";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.FilterIndex = 1;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                var fName = openFileDialog.FileName;
                Mat imge = new Mat(fName);// Image.FromFile(fName);
                srcImage = imge;





            }




            string imageFileName = "C:\Users\Administrator\Desktop\tu\2.jpg";
            //var srcImage = new Mat(imageFileName);
            //原图
            //Cv2.ImShow("Source", srcImage);
            //Cv2.WaitKey(1); // do events
            label1.Text = "原图";
            pictureBox1.Image = srcImage.ToBitmap();

            var grayImage = new Mat();
            Cv2.CvtColor(srcImage, grayImage, ColorConversionCodes.BGRA2GRAY);
            Cv2.EqualizeHist(grayImage, grayImage);
            
            var cascade = new CascadeClassifier(Application.StartupPath + "\haarcascade_frontalface_alt.xml");
            var nestedCascade = new CascadeClassifier(Application.StartupPath + "\haarcascade_eye_tree_eyeglasses.xml");

            var faces = cascade.DetectMultiScale(
                image: grayImage,
                scaleFactor: 1.1,
                minNeighbors: 2,
                flags: HaarDetectionType.DoRoughSearch | HaarDetectionType.ScaleImage,
                minSize: new OpenCvSharp.Size(30, 30)
                );
           // Console.WriteLine("Detected faces: {0}", faces.Length);

            var rnd = new Random();
            var count = 1;
            foreach (var faceRect in faces)
            {
                //人脸图
                var detectedFaceImage = new Mat(srcImage, faceRect);
                //Cv2.ImShow(string.Format("Face {0}", count), detectedFaceImage);
                //Cv2.WaitKey(0); // do events
                label2.Text = "人脸图";
                pictureBox2.Image = detectedFaceImage.ToBitmap();


                var color = Scalar.FromRgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
                Cv2.Rectangle(srcImage, faceRect, color, 3);


                var detectedFaceGrayImage = new Mat();
                Cv2.CvtColor(detectedFaceImage, detectedFaceGrayImage, ColorConversionCodes.BGRA2GRAY);
                var nestedObjects = nestedCascade.DetectMultiScale(
                    image: detectedFaceGrayImage,
                    scaleFactor: 1.1,
                    minNeighbors: 2,
                    flags: HaarDetectionType.DoRoughSearch | HaarDetectionType.ScaleImage,
                    minSize: new OpenCvSharp.Size(30, 30)
                    );

                // Console.WriteLine("Nested Objects[{0}]: {1}", count, nestedObjects.Length);
               
                foreach (var nestedObject in nestedObjects)
                {
                    var center = new OpenCvSharp.Point
                    {
                        X = (int)(Math.Round(nestedObject.X + nestedObject.Width * 0.5, MidpointRounding.ToEven) + faceRect.Left),
                        Y = (int)(Math.Round(nestedObject.Y + nestedObject.Height * 0.5, MidpointRounding.ToEven) + faceRect.Top)
                    };
                    var radius = Math.Round((nestedObject.Width + nestedObject.Height) * 0.25, MidpointRounding.ToEven);
                    Cv2.Circle(srcImage, center, (int)radius, color, thickness: 3);
                }

                count++;
            }
            //圈中人脸
            //Cv2.ImShow("Haar Detection", srcImage);
            //Cv2.WaitKey(1); // do events


            //Cv2.WaitKey(0);
            label3.Text = "圈中人脸图";
            pictureBox3.Image = srcImage.ToBitmap();
            Cv2.DestroyAllWindows();
            srcImage.Dispose();



        }

        //Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp); //bitmap转 mat
        //Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); // mat 转 bitmap
        //PictureBox.image=mat.ToBitmap(); 
        //Image img = this.pictureBox1.Image;
        //Bitmap map = new Bitmap(img);
        //Image img = Bitmap;

    }

免责声明:文章转载自《OpenCvSharp 图片人脸检测 总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java-Servlet相当于.net里的AshxLinux命令(十) 在文件或目录之间创建链接 ln下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IE浏览器日期格式问题

easyUI项目中要向页面展示格式化后的日期:把Json传来的字符串格式去掉后面的00:00:00    formatter : function(value){ var date = new Date(value); var y = date.getFullY...

Linux中/usr与/var目录详解

Linux中/usr与/var目录详解 /usr文件系统  /usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序./usr/X11R6X Window系统的所有文件...

SPark SQL 从 DB 读取数据方法和方式 scala

import org.apache.spark.sql.SQLContext import org.apache.spark.SparkConf import org.apache.spark.SparkContext import java.util.HashMap import org.apache.spark.sql.Row import org.a...

javascript版万年历

1 <!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"...

延时模糊查询

当用户在输入框上输入东西的时候,下面自动显示出搜索结果来。但是我想的是当延迟一秒,判断用户还有没有继续输入或者删除的意愿再进行ajax调用模糊查询。 方案一: fn为延时后执行的函数,delay为延时时间 1 debounce_return: function (fn, delay) { 2 var timer = null; 3...

使用multer搭建一个图片接收服务器

为了测试图片上传插件的上传功能是否好用,最近尝试搭建了一个接收图片的服务器,因为图片上传的编码格式是form-data,所以我选择使用express+multer,实现过程中发现有几个需要注意的地方,在这里和大家分享下。 1 引入express和multer 这里没什么好说的,安装好包文件后,引入文件。 var express = require('exp...