一、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()
二、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)
注意
- 长和宽会交换
- 普通的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()
我用截图软件测试了一下他的100,200处的像素结果如下(那块颜色块都是这个颜色)这个846439分别对应RGB
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()
注意:
- 需要数据类型为
np.uint8
- 长宽需要注意