【python】查看图像位深度,以及改变图像位深度的简单小结

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章