Почему это изображение 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.test1.jpg

test2.jpg

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 который сейчас черный.

Другие вопросы по тегам