Имеется нейронная сеть, способная распознавать символы. При загрузке рисунка из 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(оно-же прозрачность) вы пытаетесь по прозрачным цветам определить черный и сталкиваетесь с ситуацией когда все пиксели которые прозрачны - получают черный цвет а те которые не прозрачны остаются белыми. В этом и кроется секрет вашей хитроумной инверсии :)
Комментариев нет:
Отправить комментарий