python图片统一大小及转换通道
灰度图像:灰度图像只有一个通道。每个像素用一个8位字节表示,其取值范围通常是0-255,表示像素的不同灰度值。值越高,像素越明亮,值越低,像素越暗。RGB图像:RGB图像有三个通道,分别代表红色、绿色和蓝色。对于每个像素,每个通道上的值都是8位,其取值范围通常是0-255。通过组合不同的红色、绿色和蓝色值,可以表示形成不同颜色的像素。RGBA图像:RGBA图像有四个通道,分别代表红色、绿色、蓝色和
·
python图片统一大小及转换通道
1.为什么统一大小图片及转换通道?
- 统一大小图片
- 在深度学习中,模型输入大多数都需要相同大小图片,但是我们原始数据图片大小是不统一的,所以需要此操作
- 转换通道
- 在深度学习中,模型的输入图片的通道是有要求的,所以要根据模型来转换通道
2. 常见的图片通道和模式类型
- 图片通道
- 指的是图像中每个像素表示颜色的分量数。
- 图像模式
- 指图像的通道类型和像素深度。 在Pillow库中,每个图像都有一个模式
- 该模式表示有多少通道以及每个通道的位深度。
2.1 通道类型
-
灰度图像
- 灰度图像只有一个通道。
- 每个像素用一个
8位字节
表示,其取值范围通常是0-255
,表示像素的不同灰度值
。 - 值越高,像素越明亮,值越低,像素越暗。
import numpy as np from PIL import Image # 方式一 # 打开彩色图像并将其转换为灰度图像 img = Image.open('a.jpg').convert('L') # 将灰度图像转换为numpy数组 gray_array = np.array(img) # 保存灰度图像 Image.fromarray(gray_array).save('gray_image.jpg') # 方式二 将图像载入到一个numpy数组中 # 打开彩色图像并将其转换为灰度图像 img = Image.open('color_image.jpg').convert('L') # 将灰度图像转换为numpy数组 gray_array = np.array(img) # 保存灰度图像 Image.fromarray(gray_array).save('gray_image.jpg')
-
RGB图像
RGB
图像有三个通道
,分别代表红色、绿色和蓝色。- 对于每个像素,每个通道上的值都是
8位
,其取值范围通常是0-255
。 - 通过组合不同的红色、绿色和蓝色值,可以表示形成不同颜色的像素。
import numpy as np from PIL import Image # 方式一 # 打开灰度图像并将其转换为三通道的彩色图像 img = Image.open('gray_image.jpg').convert('RGB') # 保存三通道彩色图像 img.save('color_image.jpg') # 方式二 将图像载入到一个numpy数组中 # 打开灰度图像并将其转换为三通道的彩色图像 gray_img = Image.open('gray_image.jpg') color_array = np.array(gray_img) color_array = np.stack((color_array,) * 3, axis=-1) # 保存三通道彩色图像 Image.fromarray(color_array).save('color_image.jpg')
-
RGBA图像
RGBA
图像有四个通道
,分别代表红色、绿色、蓝色和透明度(alpha)
。- 每个像素上的值仍然是
8位
,其取值范围为0-255
,其中透明度值为0
表示完全透明,255
表示完全不透明。 - 通常在处理图像时,透明度通道用于指定像素的不透明度或混合多个图像的透明度。
import numpy as np from PIL import Image # 方式一 # 打开图像并添加alpha通道 img = Image.open('image.jpg').convert('RGBA') # 保存4通道图像 img.save('4_channel_image.png') # 方式二 将图像载入到一个numpy数组中 # 打开图像并添加alpha通道 img = Image.open('image.jpg').convert('RGBA') # 将4通道图像转换为numpy数组 img_array = np.array(img) # 保存4通道图像 Image.fromarray(img_array).save('4_channel_image.png')
2.2 模式类型
- 1(1位/像素单色)
- 此模式使用
1位
深度来表示每个像素的灰度值,其中0
表示黑色,1
表示白色。
- 此模式使用
- L(8位/像素单色)
- 此模式使用
8位
深度来表示每个像素的灰度值,其中0
表示黑色,255
表示白色。
- 此模式使用
- P(8位/像素彩色)
- 此模式是一种调色板图像,其中调色板以一种特定的方式存储在图像文件中。在
P模式
中,每个像素由一个8位
索引值表示,该索引指向存储在调色板中的相应颜色。
- 此模式是一种调色板图像,其中调色板以一种特定的方式存储在图像文件中。在
- RGB(24位/像素彩色)
- 此模式使用
24位
深度来表示红色、绿色和蓝色通道中的每个像素值,分别为8位
。RGB模式
是最常见的图像模式之一。
- 此模式使用
- RGBA(32位/像素彩色)
- 此模式与
RGB
模式类似,但还具有一个alpha
通道,该通道存储每个像素的不透明度值。
- 此模式与
- CMYK(32位/像素彩色)
- 此模式使用
32位
深度来表示青色、品红、黄色和黑色通道中的每个像素值,分别为8位
。这种模式通常用于印刷和出版业中。
- 此模式使用
- 查看图片模式代码
from PIL import Image img = Image.open('image.jpg') print(img.mode)
3.批量实现图片统一大小及转换通道代码
3.1 安装相关库
pip install numpy==1.21.5
pip install pillow==9.4.0 -i https://pypi.douban.com/simple/
3.2 代码实现
import os
from PIL import Image
import numpy as np
size_w,size_h=128,128 # 统一大小的宽高
#提取目录下所有图片,更改尺寸后保存到另一目录
old_path=' ' # 原图片地址
new_path=' ' # 统一图片大小地址
for i in os.listdir(old_path):
try:
# 打开图像并将其调整为size_w x size_h大小
old=os.path.join(old_path,i)
new=os.path.join(new_path,i)
img = Image.open(old).resize((size_w, size_h))
# 将灰度图像转换为数组,并调整形状为(size_w, size_h,3)
img_array = np.array(img).reshape((size_w, size_h,3))
# 保存形状为(size_w, size_h,3)的数组为图像
img_new = Image.fromarray(img_array, mode='RGB')
print(old,new)
img_new.save(new)
except Exception as e:
print(old, e)
continue
更多推荐
已为社区贡献2条内容
所有评论(0)