概述
本文介绍使用python读取灰度图(单通道图)、RGB图(三通道图),并转成numpy数组格式
建议使用jupyter notebook
读取方式
通过 Pillow 读取,关于 Pillow 参见:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017785454949568
感谢
感谢下面文章,更多的读取方式参见:
https://blog.csdn.net/elvirangel/article/details/96157615
读取灰度图(单通道图)
准备图片
为了便于人眼观察,采用下面16*16
的小图:
将上面16*16
单通道图下载,
读取图片
然后读取,转换numpy,如下代码:
from PIL import Image
import numpy as np
path=r"C:\Users\mym\Desktop\文件接收柜\feiji.jpg"
im = Image.open(path)
im
im2=np.array(im)
# print(im2.shape)
print(im2)
结果如下:16行16列
的矩阵,人眼可看出这是飞机图案,数值越小越接近黑色,数值越大越接近白色
读取RGB图(三通道图)
准备图片
为了便于人眼观察,采用下面16*16
的RGB图:
将上面图下载
读取图片
然后读取,转换numpy,如下代码:
path=r"C:\Users\mym\Desktop\文件接收柜\feiji_rgb2.jpg"
# 关键代码
img = Image.open(path)
img=np.array(img)
print(img.shape)
print(img)
执行结果如下:
说明:
其形状是16*16*3
,即:16高、16宽、3个通道
也就是说:每一列是一个通道的数值:
- 第一列是红色(red)值
- 第二列是绿色(green)值
- 第三列是蓝色(blue)值
按列这么排列,不符合我们人眼观察的习惯
转换数据
为了得到人眼可识别的数据结构,需要做转换,转换成16*16
的形状
for item in range(img.shape[-1]):
result=img[:,:,item]
print(result)
print('-'*50)
结果如下:
说明:
第一个矩阵是red值,图中红色区域的值很大,接近255,其他颜色区域的值很小
第二个矩阵是green值,图中绿色区域的值很大,接近255,其他颜色区域的值很小
第三个矩阵是blue值,图中蓝色区域的值很大,接近255,其他颜色区域的值很小
三个矩阵相同位置的值相同,说明是黑白色,值越小越黑,越大越白
读取RGB图并转成灰度图
如果读取的是RGB图片,读取后需要进行转换
from PIL import Image
import numpy as np
path=r"C:\Users\mym\Desktop\文件接收柜\feiji.jpg"
# 关键代码
im = Image.open(path).convert('L')
im
im2=np.array(im)
# print(im2.shape)
print(im2)