PILLOW中图像mode
--- title: python模块pillow中的mode问题 --- 在本地找了jpg的图,convert为不同mode,将不同的图截取做了个脑图,有个直观的感觉吧。 把不同mode的图通过np.array()转化为array, 打印出array的shape, 和array\[0, 0\]的值, 便于理解不同mode的通道和像素值的存储。 1 部分结果见下: !\[\](https://images2018.cnblogs.com/blog/1416983/201807/1416983-20180722103114816-749344083.png) 2 部分代码和结果: 将不同模式的图片打印出shape 和 \[0, 0\]像素点的值 \`\`\`python from PIL import Image import matplotlib.pyplot as plt image = Image.open('images/tower.jpg') # 本地一个文件 mode_list = \['1', 'L', 'I', 'F', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr' \] for mode in mode_list: img = image.convert(mode) img_data = np.array(img) print('img_{:\>1}.shape: {}' .format(mode, img_data.shape)) print('img_{:\>}_data\[0, 0\]: {}'.format(mode, img_data\[0, 0\])) print('---') \`\`\` \`\`\`python # 以下为output img_1.shape: (1276, 1920) img_1_data\[0, 0\]: False --- img_L.shape: (1276, 1920) img_L_data\[0, 0\]: 88 --- img_I.shape: (1276, 1920) img_I_data\[0, 0\]: 88 --- img_F.shape: (1276, 1920) img_F_data\[0, 0\]: 88.94599914550781 --- img_P.shape: (1276, 1920) img_P_data\[0, 0\]: 131 --- img_RGB.shape: (1276, 1920, 3) img_RGB_data\[0, 0\]: \[ 51 97 147\] --- img_RGBA.shape: (1276, 1920, 4) img_RGBA_data\[0, 0\]: \[ 51 97 147 255\] --- img_CMYK.shape: (1276, 1920, 4) img_CMYK_data\[0, 0\]: \[204 158 108 0\] --- img_YCbCr.shape: (1276, 1920, 3) img_YCbCr_data\[0, 0\]: \[ 88 160 100\] \`\`\` \`\`\` RGB 为真色彩模式, 可组合为 256 x 256 x256 种, 打印需要更改为 CMYK模式, 需要注意数值溢出的问题。 HSB 模式(本篇没有涉及),建立基于人类感觉颜色的方式,将颜色分为色相(Hue),饱和度(Saturation),明亮度(Brightness),这里不详细展开。 CMYK模式,应用在印刷领域,4个字母意思是青、洋红、黄、黑,因为不能保证纯度,所以需要黑。 位图模式,见1, 颜色由黑和白表示(True, False)。 灰度模式,只有灰度, 所有颜色转化为灰度值,见L,I,F。 双色调模式(未有涉及),节约成本将可使用双色调。 Lab模式(未涉及,ps内置),由3通道组成(亮度,a,b)组成,作为RGB到CMYK的过渡。 多通道模式,删除RGB,CMYK,Lab中某一个通道后,会转变为多通道,多通道用于处理特殊打印,它的每个通道都为256级灰度通道。 索引颜色模式,用在多媒体和网页,通过颜色表查取,没有则就近取,仅支持单通道,(8位/像素)。 \`\`\`