登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

python读取灰度图(单通道图)、RGB图(三通道图),并转成numpy数组格式

python与灰度图(单通道图)目录

概述

本文介绍使用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)

原文出处:https://www.malaoshi.top/show_1EF49ffVzKm9.html