every blog every motto: Just live your life cause we don’t live twice.
0. 前言
关于图像位深度,色深的小结
说明:
- 有不对的地方恳请指正,这方面不是太确定。
- 代码基于jupyter notebook
- 关于dtype 的辨析,可以参考我是dtype辨析
1. 正文
一张图像包括基本的信息(长,宽,通道)
from PIL import Image
import numpy as np
img = Image.open('ele.jpg')
img
img.size
img_array = np.array(img)
img_array.shape
那什么又是位深度呢?
1.1 位深度(bit depth)
- 单个像素点(一个通道)上需要用多少比特(bit)来存储数据,常见的是8位
- 8位,像素点的范围是0-255(256个值),因此位深度是8
1.2 色深
- 单个像素点(图片中所有通道)上需要用多少比特(bit)来存储数据。
- 比如,对于一张RGB的彩色图像,一个通道上的一个像素点,是8位;对于整张图像(三个通道)上的一个像素点,色深是24位(3*8),
一句话概括:位深度,每一个像素(仅看一个通道)存储所需要的位(bit)数;色深,每个像素(整张图片,或是说所有通道)存储所需要的位(bit)数;
从某种意义上,二者一样,只是看到角度不同。
1.3 查看及改变位深度
from PIL import Image
im = Image.open("xiao.png")
print(im.getbands())
输出:
('R', 'G', 'B')
根据返回的模式(model),依照下表,可知道具体的位深度。
1.4 改变图像位深度
1.4.1 方法一
先转成数组,数组转成图片时,改变位深度
img = Image.open('16label.png')
img_array = np.array(img)
img.getbands()
根据模式(model) ,可知,图像属于32位整型图像
img_array.dtype
也可以通过将图片转换成数组,后查看数组内数据的类型,知道。
转成成8位图像
img = Image.fromarray(np.uint8(img_array))
img.getbands()
由返回的模式知道,图像已转换位8位图像。
图片再转换成数组,验证
img_array = np.array(img)
img_array.dtype
1.4.2 方法二
图片转成数组时改变位深度,数组再转成图片
img2 = Image.open('test2.png')
img2.getbands()
改变数组的数据类型
img_array2 = np.array(img2,dtype='uint8')
img_array2.dtype
img2 = Image.fromarray(img_array2)
img2.getbands()
1.4.3 小结
改变位深度的两种方法,形象化的理解就是在如下的位置(1 或 2)中改变。
1.5 图片和数组相互转换(附)
from PIL import Image
import numpy as np
img = Image.open('ele.jpg')
图片转数组
img_array = np.array(img)
查看数据类型
type(img_array)
** 数组转图片**
方法一:
img_new = Image.fromarray(np.uint8(img_array))
方法二:
img_new = Image.fromarray(img_array.astype('uint8'))
参考文献
[1] https://zdaiot.com/Python/%E5%B8%B8%E7%94%A8%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8C%85/PIL%E6%80%BB%E7%BB%93/
[2] https://blog.csdn.net/bigapple88/article/details/5625742?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
[3] https://blog.csdn.net/csdn66_2016/article/details/82850695
[4] https://pillow.readthedocs.io/en/5.2.x/handbook/concepts.html?highlight=getbands
[5] https://blog.csdn.net/weixin_39190382/article/details/104975601