DotNet使用OpenCV剪切图片中的人物头像
# C# .Net 使用OpenCV剪切图片中的人物头像
nuget 安装 Emgu.CV
与 Emgu.CV.runtime.windows
版本自行选择 这里使用的是:4.3.0.3890
(高版本需要自己调试~)
下载模型:https://github.com/opencv/opencv/tree/master/data/haarcascades (opens new window)
代码:
var face = new CascadeClassifier("DLL\\haarcascade_frontalface_default.xml");
var mat = new Mat(filename, ImreadModes.Grayscale);//灰度导入图片
int minNeighbors = 7;//最小矩阵组,默认3
var size = new Size(10, 10);//最小头像大小
var facesDetected = face.DetectMultiScale(mat, 1.1, minNeighbors, size);
//循环把人脸部分切割出来并保存
int index = 0;
var bitmap = Bitmap.FromFile(filename);
foreach (var item in facesDetected)
{
index++;
var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
var g = Graphics.FromImage(bmpOut);
g.DrawImage(bitmap, new System.Drawing.Rectangle(0, 0, item.Width, item.Height),
new System.Drawing.Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
g.Dispose();
bmpOut.Save($"{filename.Substring(0, filename.LastIndexOf("\\") + 1)}Face_{index}.png", System.Drawing.Imaging.ImageFormat.Png);
bmpOut.Dispose();
}
bitmap.Dispose();
mat.Dispose();
face.Dispose();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
上次更新: 2023/05/09, 17:54:37