Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }