#c_sharp #изображения #нейронные_сети
Имеется нейронная сеть, способная распознавать символы. При загрузке рисунка из 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); } }
Ответы
Ответ 1
Предполагаю что проблема в работе с каналами цветного изображения в цветовой схеме ARGB. Когда Paint сохраняет изображение, он приводит её к RGB и проблем не возникает. При других редакторах цветовая схема остается ARGB. Вот какая складывается ситуация: Вы берете цветовой схемы, в первом случае это RGB, и по каналу R определяете черный это или не черный. В итоге инициализация проходит успешно. Во втором случае с схемой ARGB, в которой изображение имеет прозрачность, первым каналом является A - alpha(оно-же прозрачность) вы пытаетесь по прозрачным цветам определить черный и сталкиваетесь с ситуацией когда все пиксели которые прозрачны - получают черный цвет а те которые не прозрачны остаются белыми. В этом и кроется секрет вашей хитроумной инверсии :)Ответ 2
if (col.R == 0 && col.B == 0 && col.G == 0) Не хватает проверки && col.A != 0. Видимо, paint сохранил прозрачный фон всеми ноликами.
Комментариев нет:
Отправить комментарий