如何在c#项目中利用OpenCV对图片中人物的头像进行剪切

  介绍

这篇文章主要介绍了如何在c#项目中利用OpenCV对图片中人物的头像进行剪切,此处给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:


首先创建一个Wpf项目,OpenCV_Face_Wpf这里版本使用Framework4.7.2。

然后使用Nuget搜索【Emgu。简历】,如下图。

如何在c#项目中利用OpenCV对图片中人物的头像进行剪切

这里的Emgu.CV选择4.3.0.3890版本,然后安装Emgu.CV和Emgu.CV.runtime.windows。

然后下载所需文件haarcascade_frontalface_default.xml。

可以去OpenCV的开源代码中下载,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades。

然后将文件加入进项目,并修改属性,让xml文件输出到启动目录,如下图。

如何在c#项目中利用OpenCV对图片中人物的头像进行剪切

使用OpenCV剪切人脸部分

现在,我们进入项目,进行OpenCV的调用。

首先引入命名空间,如下:

using  Emgu.CV;   using  Emgu.CV.CvEnum;   using  Emgu.CV.Structure;   using  System.Drawing;   using  System.Windows.Forms;

然后编写人脸剪切函数——CutFace。

函数里,我们先使用CascadeClassifier类读取haarcascade_frontalface_default。xml文件,建立人脸检测的对象。

再使用垫类来导入图片(灰度模式)。

然后再使用人脸检测的对象的方法,DetectMultiScale进行人脸数量识别。

最后通过位图类把识别出来的人脸进行剪切保存。

代码如下:

public  void  CutFace (string 文件名)   {//CvInvoke.UseOpenCL 才能=,CvInvoke.HaveOpenCLCompatibleGpuDevice;//使用GPU运算   var 才能;face =, new  CascadeClassifier (“haarcascade_frontalface_default.xml");   var 才能;mat =, new 垫(文件名,,ImreadModes.Grayscale);//灰度导入图片   int 才能;minNeighbors =, 7;//最小矩阵组,默认3   var 才能;size =, new  System.Drawing.Size(10,, 10);//最小头像大小   var 才能;facesDetected =, face.DetectMultiScale(垫,,1.1,,minNeighbors,,大小);//才能循环把人脸部分切割出来并保存   int 才能;index =, 0;   var 才能;bitmap =, Bitmap.FromFile(文件名);   foreach 才能;(var  item  facesDetected拷贝)   {才能   ,,,指数+ +;   ,,,var  bmpOut =, new 位图(item.Width, item.Height,, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   ,,,var  g =, Graphics.FromImage (bmpOut);   ,,,g.DrawImage(位图,new  System.Drawing.Rectangle (0, 0, item.Width,, item.Height),   ,,,,,new  System.Drawing.Rectangle (item.Y, item.X,还以为,item.Width, item.Height),, GraphicsUnit.Pixel);   ,,,g.Dispose ();   ,,,bmpOut.Save(美元“Face_{指数}.png",, System.Drawing.Imaging.ImageFormat.Png);   ,,,bmpOut.Dispose ();   ,,}   bitmap.Dispose才能();   mat.Dispose才能();   face.Dispose才能();   }

然后编写一个打开文件的函数,在成功打开文件后调用CutFace。

public  void  SelectImg ()   {   System.Windows.Forms.OpenFileDialog 才能;frm =, new  System.Windows.Forms.OpenFileDialog ();   frm.Filter =,才能“(* . jpg, * . png, * . jpeg, * . bmp) | * .jgp; * . png; * jpeg; * . bmp | All 文件(* . *)| * . *”;   if 才能;(frm.ShowDialog (),==, System.Windows.Forms.DialogResult.OK)   {才能   ,,,CutFace (frm.FileName);   ,,}   }

现在我们启动项目,如下图:

如何在c#项目中利用OpenCV对图片中人物的头像进行剪切

运行结果

点击界面中的打开图片,选中带人脸的图片进行测试。

代码中默认把剪切的图片保存到调试文件夹下,我们打开调试文件夹,如下图:

如何在c#项目中利用OpenCV对图片中人物的头像进行剪切

到此这篇关于如何在c#项目中利用OpenCV对图片中人物的头像进行剪切的文章就介绍到这了,更多相关的内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

如何在c#项目中利用OpenCV对图片中人物的头像进行剪切