ale*_*xis 4 python image pillow
我使用Python Pillow lib在将图像发送到设备之前更改图像.我需要更改图像以确保它符合以下要求
除了Color Depth到4位,我可以做所有这些.任何人都可以指出我如何实现这一目标的正确方向?
到目前为止,我还没能用Pillow保存4位图像.您可以使用Pillow减少图像中的灰度级数:
import PIL.Image as Image
im = Image.open('test.png')
im1 = im.point(lambda x: int(x/17)*17)
Run Code Online (Sandbox Code Playgroud)
假设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))
Run Code Online (Sandbox Code Playgroud)
最终得到的图像只包含16个不同的值(0,1,2,...,15).所以这些值都适合uint4类型.但是,如果用Pillow保存这样的图像
im2.save('test.png')
Run Code Online (Sandbox Code Playgroud)
png的颜色深度仍为8bit(如果打开图像,则只能看到真正的深灰色像素).你可以使用PyPng保存一个真正的4位png:
import png
import numpy as np
png.fromarray(np.asarray(im2, np.uint8),'L;4').save('test4bit_pypng.png')
Run Code Online (Sandbox Code Playgroud)
不幸的是,PyPng似乎需要更长的时间来保存图像.
小智 0
使用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')
Run Code Online (Sandbox Code Playgroud)
请参阅示例:通过改进的灰度进行图像量化。[Python]