Python反转二进制图像; .invert()失败了

时间:2017-01-02 03:28:52

标签: python image python-2.7 numpy invert

我有一个二进制图像,尺寸为64x63,其中每个像素都是1或0。

import struct
from PIL import Image
import numpy

...

i1 = Image.frombytes('1', (64, 63), r[3], 'raw')

如何反转此图像?

修改

我尝试了建议的解决方案:

from PIL import Image
import PIL.ImageOps    

i1 = PIL.ImageOps.invert(i1)

然而,这导致了错误:

raise IOError("not supported for this image mode")
IOError: not supported for this image mode

我认为,这是因为图像既不是RGB也不是L(灰度)。相反,它是一个二进制图像文件,其中每个像素只有0或1。

4 个答案:

答案 0 :(得分:1)

如果您愿意将i1转换为numpy数组,则可以执行

i1 = 1 - numpy.asarray(i1)

答案 1 :(得分:0)

我遇到了同样的问题。有一个解决方案,没有麻烦使用numpy 你可以使用ImageMath

from PIL import ImageMath
i2 = ImageMath.eval('255-(a)',a=i1)

这样您就可以反转二进制(PIL中的模式1)图像 有关ImageMath的更多信息,请参阅here

答案 2 :(得分:0)

另一种选择是在反转图像之前将其转换为支持的反转格式,即:

import PIL.ImageOps
inverted_image = PIL.ImageOps.invert( image.convert('RGB') )

答案 3 :(得分:-1)

from PIL import Image
import PIL.ImageOps    

image = Image.open('your_image.png')

inverted_image = PIL.ImageOps.invert(image)

inverted_image.save('your_image_inv.png')