基于OpenCV人脸识别 并出提取人脸
翻遍了百度只有WPF跟WinForm的,这个可以支持Asp.Net .NetCore,本人用来网页端上传头像,后端先保存网页传入的照片再进行照片处理就OK了。
一.首先引用三个Nuget包
- 1.Emgu.CV
- 2.Emgu.CV.runtime.windows
- 3.Emgu.CV.Bitmap
二.下载OpenCV训练好的XML
- haarcascade_frontalface_alt.xml 链接 OpenCV
var face = new CascadeClassifier("haarcascade_frontalface_alt.xml");
//加载要识别的图片
var img = new Image<Bgr, byte>(@"C:\Users\Administrator\Pictures\Saved Pictures\微信图片_20210401213647.jpg");
//在这一步就已经识别出来了,返回的是人脸所在的位置和大小
var facesDetected = face.DetectMultiScale(img, 1.1, 10, new Size(50, 50));
//循环把人脸部分切出来并保存
int count = 0;
var b = img.ToBitmap();
foreach (var item in facesDetected)
{
count++;
var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
var g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(0, 0, item.Width, item.Height), new Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
g.Dispose();
bmpOut.Save($"{count}.png", System.Drawing.Imaging.ImageFormat.Png);
bmpOut.Dispose();
}
//释放资源退出
b.Dispose();
img.Dispose();
face.Dispose();