public static Color ExtractMiddleColor(Mat face) { var subWidth = face.Width / Config.FaceDimension; var subHeight = face.Height / Config.FaceDimension; var centerX = subWidth / 2; var centerY = subHeight / 2; int i = (Config.FaceDimension - 1) / 2; int j = (Config.FaceDimension - 1) / 2; var sub = new Mat(face, new Rect(i * subWidth, j * subHeight, subWidth, subHeight)); var intensity = sub.At <Vec3b>(centerX, centerY); byte blue = intensity.Item0; byte green = intensity.Item1; byte red = intensity.Item2; var color = Color.FromArgb(red, green, blue); var c1 = ClosestColorRgb(color); var c2 = ClosestColorHue(color); var c3 = ClosestColorHsb(color); var list = new List <Color> { c1, c2, c3 }; var max = list.GroupBy(s => s) .OrderByDescending(s => s.Count()) .First().Key; var cl = FileColorExtractor.GetColor(color.ToHexString()); var newColor = FileColorExtractor.GetColor(cl); //if (max == Color.Orange && newColor != Color.Orange) // newColor = Color.Orange; return(newColor); }
public static FaceColors Extract(Mat face, Guid jobId) { var faceId = Guid.NewGuid(); var dir = new DirectoryInfo($"Results\\{jobId}\\Extracted\\Unique\\{faceId}"); if (!dir.Exists) { dir.Create(); } var bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(face); bitmap.Save($"Results\\{jobId}\\Extracted\\Unique\\{faceId}\\face.png", ImageFormat.Png); bitmap.Save($"Results\\{jobId}\\Extracted\\Unique\\{faceId}.png", ImageFormat.Png); var result = new FaceColors(); var subWidth = face.Width / Config.FaceDimension; var subHeight = face.Height / Config.FaceDimension; var centerX = subWidth / 2; var centerY = subHeight / 2; for (int i = 0; i < Config.FaceDimension; i++) { for (int j = 0; j < Config.FaceDimension; j++) { var sub = new Mat(face, new Rect(i * subWidth, j * subHeight, subWidth, subHeight)); //var colors = new List<Color>(); //for (int k = centerX - 20; k < centerX + 20; k++) // for (int p = centerY - 20; p < centerY + 20; p++) // { // var intensity = sub.At<Vec3b>(k, p); // byte blue = intensity.Item0; // byte green = intensity.Item1; // byte red = intensity.Item2; // var color1 = Color.FromArgb(red, green, blue); // color1 = ClosestColorRgb(color1); // colors.Add(color1); // } //var color = colors.GroupBy(s => s) // .OrderByDescending(s => s.Count()) // .First().Key; var intensity = sub.At <Vec3b>(centerX, centerY); byte blue = intensity.Item0; byte green = intensity.Item1; byte red = intensity.Item2; var color = Color.FromArgb(red, green, blue); var c1 = ClosestColorRgb(color); var c2 = ClosestColorHue(color); var c3 = ClosestColorHsb(color); var list = new List <Color> { c1, c2, c3 }; var max = list.GroupBy(s => s) .OrderByDescending(s => s.Count()) .First().Key; var newColor = FileColorExtractor.GetColor(FileColorExtractor.GetColor(color.ToHexString())); //if (max == Color.Orange && newColor != Color.Orange) // newColor = Color.Orange; result.SetColor(i.ToString() + "-" + j.ToString(), newColor); bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(sub); //bitmap.Save($"Results\\{jobId}\\Extracted\\Unique\\{faceId}\\sub-{i}-{j}({newColor.Name}).png", ImageFormat.Png); bitmap.Save($"Results\\{jobId}\\Extracted\\Unique\\{faceId}\\sub-{i}-{j}({newColor.Name})({c1.Name}-{c2.Name}-{c3.Name})({color.R}-{color.G}-{color.B}).png", ImageFormat.Png); } } return(result); }