Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Распознавание символов и работа с изображенями

Имеется нейронная сеть, способная распознавать символы. При загрузке рисунка из Paint размеров 150 на 150 всё работает нормально.Фон здесь белый, буква нарисована чёрным цветом.

При загрузке картинки ( также 150 на 150) с прозрачным фоном программа работает "наоборот"
Для удобства понимания вывел цвета пикселей( во втором случае первый пиксель, который является прозрачным, почему-то распознаётся как чёрный, а чёрный соответственно не является почему-то чёрным).
Первая и вторая картинка имеет одинаковый формат .png
Каким образом можно настроить программу для работы с изображением на прозрачном фоне?
Метод считывания картинки
public void get(Bitmap map) { for (int x = 0; x < mbut.GetLength(0); x++) { for (int y = 0; y < mbut.GetLength(1); y++) { Color col = map.GetPixel(x, y); if (col.R == 0 && col.B == 0 && col.G == 0) mbut[x, y] = true; else label9.Text = "Цвет пикселя номер " + x + ":" + y+" "+ Convert.ToString(map.GetPixel(x, y)); } } label10.Text = "Цвет первого пикселя: " + Convert.ToString(map.GetPixel(0, 0)); }
Метод прорисовки весов
public void draw(int n) { using (Bitmap map = new Bitmap(150, 150)) { for (int x = 0; x < weight.GetLength(0); x++) { for (int y = 0; y < weight.GetLength(1); y++) { if (weight[x, y] > 1) { map.SetPixel(x, y, Color.Black); } } } map.Save(String.Format("Pictures/{0}.png",n), System.Drawing.Imaging.ImageFormat.Png); } }


Ответ

Предполагаю что проблема в работе с каналами цветного изображения в цветовой схеме ARGB. Когда Paint сохраняет изображение, он приводит её к RGB и проблем не возникает. При других редакторах цветовая схема остается ARGB
Вот какая складывается ситуация:
Вы берете цветовой схемы, в первом случае это RGB, и по каналу R определяете черный это или не черный. В итоге инициализация проходит успешно.
Во втором случае с схемой ARGB, в которой изображение имеет прозрачность, первым каналом является A - alpha(оно-же прозрачность) вы пытаетесь по прозрачным цветам определить черный и сталкиваетесь с ситуацией когда все пиксели которые прозрачны - получают черный цвет а те которые не прозрачны остаются белыми. В этом и кроется секрет вашей хитроумной инверсии :)

Комментариев нет:

Отправить комментарий