我正在使用DlibDotNet,并且是其中的新手。我有来自Detect Faces With C# And Dlib In Only 40 Lines Of Code的以下代码:
static void Main(string[] args)
{
// set up Dlib facedetector
using (var fd = Dlib.GetFrontalFaceDetector())
{
var img = Dlib.LoadImage<RgbPixel>(inputFilePath);
// find all faces in the image
var faces = fd.Operator(img);
foreach (var face in faces)
{
// draw a rectangle for each face
Dlib.DrawRectangle(img, face, color: new RgbPixel(0, 255, 255), thickness: 4);
}
Dlib.SaveJpeg(img, "output.jpg");
}
}
问题是如何提取图像中检测到的所有面部?
我已经测试过Dlib.ExtractImageChips()
方法,但是我不知道如何正确使用它。
谢谢。
答案 0 :(得分:1)
使用Dlib.GetFaceChipDetails()和Dlib.ExtractImageChips()之后,您应该从给定图像中获取人脸图像,只需将其转换为Bitmap。转换
Array2D到Bitmap,您应该在项目中添加DlibDotNet.Extensions DLL最新版本。代码看起来像
List<Image> images = new List<Image>();
using (var faceChips = Dlib.ExtractImageChips<RgbPixel>(img, chipLocations))
{
Image image = null;
//Iterate face chips and add image one by one if multiple images existed
foreach (var face in faceChips)
{
image = face.ToBitmap();
images.Add(image);
}
}
Here is a sample application展示了如何从图像文件中提取面部图像。
答案 1 :(得分:0)
我在进入库后找到了方法。这是实现:
DPoint[] dPoint = new DPoint[] {
new DPoint(face.TopLeft.X, face.TopLeft.Y),
new DPoint(face.TopRight.X, face.TopRight.Y),
new DPoint(face.BottomLeft.X, face.BottomLeft.Y),
new DPoint(face.BottomRight.X, face.BottomRight.Y),
};
int width = (int)dRectangle.Width;
int height = (int)dRectangle.Height;
img = Dlib.ExtractImage4Points(img, dPoint, width, height);
其中img是源图像,dPoint是由四个点组成的数组,这些点代表提取图像的四个角,宽度和高度是提取图像的像素大小。