Почему это изображение PBM ведет себя странно
Я пытаюсь понять, почему я не получаю ожидаемый результат от следующих строк кода:
pix=np.asarray(Image.open(File))) #I am reading a pbm file into memory
img = Image.fromarray((pix), '1') #rewriting
img.save("test1.pbm")
newpix=~pix #inverting the image
img = Image.fromarray((newpix), '1')
img.save("test2.pbm")
Исходное изображение и test1.pbm(изображение 1) - это то же самое, но test2.pbm (изображение 2) - это не то, что я ожидаю (пиксели переднего плана становятся фоновыми, и наоборот). Я прилагаю изображения здесь (в формате JPEG). Что я делаю неправильно?
Другая проблема заключается в том, что для большинства пикселей переднего плана в test1.pbm значение равно False. Но это не отражается на сохраненном изображении.
Я преобразовал оба эти изображения из этого исходного изображения http://www.mathgoodies.com/lessons/graphs/images/line_example1.jpg с помощью Imagemagick.
1 ответ
Я не узнаю, какой язык вы используете, но ваше исходное изображение при преобразовании с помощью ImageMagick выглядит так:
convert cdLTY.jpg -negate out.jpg
выглядит так:
Так что я понимаю, что проблема в вашей инверсии. Я не знаю что
newpix=~pix
(возможно, дополняет или инвертирует все биты?), но я думаю, что вам нужно subtract
каждый пиксель от 255, чтобы инвертировать ваше изображение, так что если пиксель 10
в исходном изображении это должно быть 255-10
или же 245
в новом образе.
объяснение
Пиксели обычно кодируются с 0= черный и 255= белый. Итак, если ваш пиксель изначально был черным (0
) когда вы делаете new pixel = 255 - original value
, это станет 255-0
, или же 255
то есть теперь он белый. Аналогично, если пиксель начинается с белого цвета (255
), когда вы делаете 255-255
ты получаешь 0
который сейчас черный.