/// <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)[]
/// <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); }
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>()); }