【从矩阵到图像的类型转换4】:PIL库Image类型与Numpy类型转换

一、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模块查看图像通道数

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值