Работа с изображениями пакета Emgu.CV
Некоторые функции преобразования изображений перед из распознаванием.
Код:
using Emgu.CV;
using Emgu.CV.Face;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.Util;
Преобразование из цветного в грейскейл:
Код:
public Image<Gray, byte> ConvertToGray(Image<Rgb, byte> img, ColorConversion cnv = ColorConversion.Rgb2Gray, int size_x = 0, int size_y = 0)
{
UMat ret = new UMat();
if (size_x == 0 || size_y == 0)
CvInvoke.CvtColor(img, ret, cnv);
else
CvInvoke.CvtColor(img.Resize(size_x, size_y, Inter.Cubic), ret, cnv);
CvInvoke.EqualizeHist(ret, ret);
return ret.ToImage<Gray, byte>();
}
Admin добавил 23.09.2023 в 06:53
Загрузка из файлов в словарь:
Код:
public Dictionary<Image<Gray, byte>, string> LoadImageDatabase(List<string> files, string extension, string prefix)
{
Dictionary<Image<Gray, byte>, string> ret = new Dictionary<Image<Gray, byte>, string>(); // KeyPair фото - ФИО
for (int i = 0; i < files.Count; i++)
if (File.Exists(files[i]))
{
Image<Gray, byte> img = ConvertToGray(new Image<Rgb, byte>(files[i]));
string fio = ExtractFIO(files[i], extension, prefix);
if (!ret.ContainsKey(img) && fio != "")
ret.Add(img, fio);
}
return ret;
}
Admin добавил 23.09.2023 в 06:54
Вспомогательная функция выделения ФИО из имени файла:
Код:
public string ExtractFIO(string filename, string extension, string prefix)
{
string ret = filename;
MessageBox.Show(filename + "|||" + extension + "|||" + prefix);
ret = ret.Substring(0, filename.Length - ("." + extension).Length);
if (ret.Length - prefix.Length > 0) // проверяем на всякий случай что внутри имени есть ФИО
ret = ret.Substring(prefix.Length, ret.Length - prefix.Length);
else
ret = ""; // Если ФИО нет - возвращаем пустышку
return ret;
}
|