为什么这个pbm图像表现得很奇怪

时间:2014-09-30 03:53:20

标签: image image-processing python-imaging-library netpbm

我试图理解为什么我没有得到以下代码行的预期结果:

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。但这并没有反映在保存的图像中。

我使用Imagemagick从原始图像http://www.mathgoodies.com/lessons/graphs/images/line_example1.jpg转换了这两个图像。 test1.jpg

test2.jpg

1 个答案:

答案 0 :(得分:0)

我不会识别您正在使用哪种语言,但是在使用ImageMagick转换时,您的原始图像是这样的:

convert cdLTY.jpg -negate out.jpg

看起来像这样:

enter image description here

所以我推断出问题出在你的倒置中。我不知道是什么

newpix=~pix

确实(可能补充它或反转所有位?)但我认为你需要subtract每个像素从255反转你的图像,所以如果原始图像中的像素为10,它必须是新图片中的255-10245

<强>解释

像素通常编码为0 =黑色,255 =白色。因此,如果您执行0时像素原来是黑色(new pixel = 255 - original value),它将变为255-0,或255意味着它现在为白色。同样,如果一个像素从白色开始(255),当你执行255-255时,你会得到0现在为黑色。