0

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

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(image 1 ) 相同,但 test2.pbm (image 2 ) 不是我所期望的(前景像素变为背景像素,反之亦然)。我在此处附上图像(转换为 jpeg)。我究竟做错了什么?

另一个问题是,对于 test1.pbm 中的大多数前景像素,该值为 False。但这并没有反映在保存的图像中。

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

测试2.jpg

4

1 回答 1

0

当像这样使用 ImageMagick 进行转换时,我不知道您使用的是哪种语言,而是您的原始图像:

convert cdLTY.jpg -negate out.jpg

看起来像这样:

在此处输入图像描述

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

newpix=~pix

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

解释

像素通常用 0=black 和 255=white 编码。因此,如果您的像素最初是黑色 ( 0) 时new pixel = 255 - original value,它将变为255-0,或者255意味着它现在是白色的。同样,如果一个像素从白色 ( 255) 开始,当你这样做时,你255-255会得到0现在是黑色的。

于 2014-09-30T08:21:59.413 回答