我使用Python Pillow lib在将图像发送到设备之前更改图像。 我需要更改图像以确保它符合以下要求
除了Color Depth到4位之外,我可以完成所有这些操作。 有人能指出我如何实现这个目标吗?
答案 0 :(得分:5)
到目前为止,我还没能用Pillow保存4位图像。您可以使用Pillow来减少图像中的灰度级数:
import PIL.Image as Image
im = Image.open('test.png')
im1 = im.point(lambda x: int(x/17)*17)
假设test.png是一个8位灰度图像,即它包含0-255范围内的值(im.mode =='L'),im1现在只包含16个不同的值(0,17,34, ......,255)。这也是ufp.image.changeColorDepth所做的。但是,您仍然有一个8位图像。所以不是上面的,你可以做
im2 = im.point(lambda x: int(x/17))
最终得到一个只包含16个不同值(0,1,2,...,15)的图像。所以这些值都适合uint4类型。但是,如果使用Pillow
保存这样的图像im2.save('test.png')
png的颜色深度仍为8bit(如果打开图像,则只能看到真正的深灰色像素)。您可以使用PyPng保存真正的4位png:
import png
import numpy as np
png.fromarray(np.asarray(im2, np.uint8),'L;4').save('test4bit_pypng.png')
不幸的是,PyPng似乎需要更长时间来保存图像。
答案 1 :(得分:-1)
在ufp.image模块中使用changeColorDepth函数。
import ufp.image
import PIL
im = PIL.Image.open('test.png')
im = im.convert('L') # change to grayscale image
im.thumbnail((298, 144)) # resize to 294x144
ufp.image.changeColorDepth(im, 16) # change 4bits depth(this function change original PIL.Image object)
#if you will need better convert. using ufp.image.quantizeByImprovedGrayScale function. this function quantized image.
im.save('changed.png')