Как назначить положение точек на изображении для соответствующей текстовой метки - PullRequest
1 голос
/ 11 марта 2020

У меня есть программа C#, которая обрабатывает изображение и возвращает положение, в котором точки расположены на изображении, следующим образом

    public class Program
{
    public static void Main()
    {
        var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("ImageDotsToData.dots.png");

        byte[] buffer = new byte[resource.Length];
        resource.Read(buffer, 0, buffer.Length);

        var positions = GetDotsPositions(buffer);

        foreach (var position in positions)
        {
            Console.WriteLine(position);
        }

        Console.ReadLine();
    }

    public static List<Tuple<int, int>> GetDotsPositions(byte[] imgData)
    {
        int HEIGHT = 400;
        int WIDTH = 600;

        List<Tuple<int, int>> positions = new List<Tuple<int, int>>();
        Bitmap bitmap;
        using (Stream bmpStream = new MemoryStream(imgData))
        {
            Image image = Image.FromStream(bmpStream);
            bitmap = new Bitmap(image);
        }

        List<int> knownBlankColors = new List<int>();
        knownBlankColors.Add(Color.White.ToArgb());

        for (int x = 0; x < HEIGHT; x++)
        {
            for (int y = 0; y < WIDTH; y++)
            {
                Color pixelColor = bitmap.GetPixel(x, y);

                var code = pixelColor.ToArgb();

                if (!knownBlankColors.Contains(code))
                    positions.Add(new Tuple<int, int>(x, y));
            }
        }

        return positions;
    }
}

, что дает следующий вывод:

(114, 33)
(114, 34)
(114, 35)
(114, 36)
(114, 37)
(114, 38)
(114, 39)
(114, 40)
(115, 33)
(115, 34)
(115, 35)
(115, 36)
(115, 37)
(115, 38)
(115, 39)
(115, 40)
(116, 33)
(116, 34)

et c и т. Д. Для следующего изображения enter image description here

Теперь мой вопрос состоит в том, как назначить положение точек для метки, которая соответствует изображению ниже в json enter image description here, как вы можете видеть на изображении, что Row1 имеет точку в позиции (114,33)

, как мне назначить метки для каждой из точек? чтобы дать мне результат, подобный {"Row1": "(114, 33)"}

Обратите внимание, что каждый текст метки должен быть жестко закодирован в

1 Ответ

0 голосов
/ 11 марта 2020

Если ваши строки имеют одинаковую ширину, то это совпадение c.

  1. Разделите высоту вашего изображения на количество строк и присвойте переменной rowHeight
  2. Затем
 // if y > 0 and y < rowHeight, then it belongs to Row 1
 if( y > ((i-1) * rowHeight) && y < (i * rowHeight)) { 
      return i;
 }

Затем можно использовать I для создания новой коллекции или распечатать ее.

...