Пример #1
0
        /// <summary>
        /// Получает контур замкнутой фигуры цвета <see cref="ContourColor"/>.
        /// </summary>
        /// <remarks>Поиск осуществляется алгоритмом левой руки.</remarks>
        /// <returns>Список точек контура по часовой стрелке.</returns>
        public static List <Point> FindContour(Bitmap bitmap)
        {
            var result = new List <Point>();

            var img = new ImageWrapper(bitmap, true);


            using (img)
            {
                var clockwiseOffsetPoints = new (int dx, int dy)[]
Пример #2
0
        /// <summary>
        /// Ищет точку, которая однозначно входит в контур фигуры цветом <see cref="ContourColor"/>.
        /// Причём поиск осуществляется слева направо.
        /// </summary>
        private static Point?FindAnyContourPoint(ImageWrapper b)
        {
            for (var y = 5; y < b.Height; y++)
            {
                for (var x = 5; x < b.Width; x++)
                {
                    Color cur = b[x, y];
                    if (cur.R == ContourColor.R && cur.G == ContourColor.G && cur.B == ContourColor.B)
                    {
                        return(new Point(x, y));
                    }
                }
            }

            return(null);
        }
Пример #3
0
        public static Image <Gray, byte> DeleteTheBackground(Image <Gray, byte> img, Image <Gray, byte> bimg)
        {
            using var source    = new ImageWrapper(img.ToBitmap());
            using Bitmap result = new Bitmap(source.Width, source.Height);

            using var mask = new ImageWrapper(bimg.ToBitmap());

            var en = source.GetEnumerator();

            while (en.MoveNext())
            {
                var point = en.Current;

                var color = mask[point].GetBrightness() == 1 ? Color.White : source[point];

                result.SetPixel(point.X, point.Y, color);
            }

            return(result.ToImage <Gray, byte>());
        }