从矩阵到图像4的类型转换:pil库中图像类型与numpy类型的转换,4PIL,Image,Numpy

发表时间:2021-05-11

一、PIL库读取图片后类型示例

from PIL import Image
img=Image.open("./1.png")
print("类型:",type(img))
print("类型名称:",img.__class__.__name__)

# 显示和用户交互
import matplotlib.pyplot as plt
plt.imshow(img)
plt.show()

image-20210424134054674

二、 PIL库 读取图片后 Image类型 转换成 numpy库 np.array类型

为了方便显示长宽我们换一张长宽不相等的图

from PIL import Image
import numpy as np
img_image=Image.open("./1.png")
print("Image类型大小[W*H]:",img_image.size)
print("Image类型图像通道数:",len(img_image.split()))
print("Image类型图像[100,200]像素值:",img_image.getpixel((100,200)))

img_numpy = np.array(img_image)
print("np.array类型维度大小[H*W*C]:",img_numpy.shape)
print("np.array类型中[200,100,:]的值:",img_numpy[200,100,:])
print("np.array类型的数据类型:",img_numpy.dtype)

image-20210424153939250

注意

  • 长和宽会交换
  • 普通的png图片会转换成

三、 np.array类型 转换成 PIL库 Image类型

from PIL import Image
import numpy as np
img_image=Image.open("./1.png")
print("Image类型大小[W*H]:",img_image.size)
print("Image类型图像通道数:",len(img_image.split()))
print("Image类型图像[100,200]像素值:",img_image.getpixel((100,200)))


img_numpy = np.array(img_image)
print("np.array类型维度大小[H*W*C]:",img_numpy.shape)
print("np.array类型中[200,100,:]的值:",img_numpy[200,100,:])
print("np.array类型的数据类型:",img_numpy.dtype)

img_image=Image.fromarray(img_numpy)
print("Image类型大小[W*H]:",img_image.size)
print("Image类型图像通道数:",len(img_image.split()))
print("Image类型图像[100,200]像素值:",img_image.getpixel((100,200)))

# 显示和用户交互
import matplotlib.pyplot as plt
plt.imshow(img_image)
plt.show()

image-20210424154028443

我用截图软件测试了一下他的100,200处的像素结果如下(那块颜色块都是这个颜色)这个846439分别对应RGB

2021-04-24_14-28-12

from PIL import Image
import numpy as np
R = np.matrix([np.arange(0,256) for _ in range(256)],dtype = np.uint8) #横向R从0-255
G = np.matrix([np.ones(256)*i for i in range(0,256)],dtype = np.uint8) #纵向G从0-255
B = np.zeros((256 ,256),dtype = np.uint8) #B一直为0
R = np.expand_dims(R, axis=2)
G = np.expand_dims(G, axis=2)
B = np.expand_dims(B, axis=2)
img_numpy = np.concatenate((R,G,B), axis=2)
img_image=Image.fromarray(img_numpy)
print("Image类型大小[W*H]:",img_image.size)
print("Image类型图像通道数:",len(img_image.split()))

# 显示和用户交互
import matplotlib.pyplot as plt
plt.imshow(img_image)
plt.show()

image-20210424150513071

注意:

  • 需要数据类型为 np.uint8
  • 长宽需要注意

Last、参考文献

Python-获取图片的大小

Python的PIL库中的图像尺寸size

python使用PIL库读取图片的像素值

PIL模块查看图像通道数

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free