Выделить лица из фото (пакет Emgu.CV)
Выделить лица из фото (пакет Emgu.CV)
storagefolder - папка с файлами фото, которые будут сохранены
Код:
public Image<Gray, byte>[] ExtractFacesFromPhoto(Image<Rgb, byte> img, string file_prefix, string storagefolder, bool savetofile = false)
{
// массив Image с лицами, IsFaceOnPhoto(img) возвращает количество лиц
Image<Gray, byte>[] ret = new Image<Gray, byte>[IsFaceOnPhoto(img)];
Image<Gray, byte> gray_img = ConvertToGray(img);
Rectangle[] rec = GetRectanglesForFaces(gray_img);
if (rec.Length != ret.Length)
return ret;
for (int i = 0; i < rec.Length; i++)
ret[i] = gray_img.GetSubRect(rec[i]);
if (savetofile)
{
for (int i = 0; i < rec.Length; i++)
{
AddToErrorLog("Сохранение в файл: " + FilesAndFolders.GenerateUniqueFilename(file_prefix, $"{Directory.GetCurrentDirectory()}\\{storagefolder}\\", "jpg", "_"));
// MessageBox.Show(FilesAndFolders.GenerateUniqueFilename(file_prefix, $"{Directory.GetCurrentDirectory()}\\{storagefolder}\\", "jpg", "_"));
ret[i].Save(FilesAndFolders.GenerateUniqueFilename(file_prefix, $"{Directory.GetCurrentDirectory()}\\{storagefolder}\\", "jpg", "_"));
}
}
return ret;
}
|