我试图理解为什么我没有得到以下代码行的预期结果:
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转换了这两个图像。
答案 0 :(得分:0)
我不会识别您正在使用哪种语言,但是在使用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
现在为黑色。