我有一个二进制图像,尺寸为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。
答案 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')