为什么 Matplotlib 将 .png 加载到 float32 中(从 0 到 1):
img = mpimg.imread('some.png')
print(img.dtype)
>>> float32
Run Code Online (Sandbox Code Playgroud)
和 .jpg 到 int8(从 0 到 255):
img = mpimg.imread('some.jpg')
print(img.dtype)
>>> int8
Run Code Online (Sandbox Code Playgroud)
为什么?是基于什么考虑实现的?
Imp*_*est 12
正如imread文档所述:
matplotlib 只能在本机读取 PNG,但是如果安装了 PIL,它将使用它来加载图像并返回一个数组(如果可能)[...]
所以对于png图像,matplotlib 有自己的代码来读取图像,而对于jpg它依赖于PIL.
import matplotlib.pyplot as plt
im = plt.imread("house.png")
print im.dtype # float32
im = plt.imread("house.jpg")
print im.dtype # uint8
Run Code Online (Sandbox Code Playgroud)
_png负责加载png图像的内部模块有两个功能,read_png_float和read_png_int. 虽然默认read_png_float使用,但您也可以手动使用read_png_int获取整数图像。
import matplotlib._png as png
im = png.read_png_float("house.png")
print im.dtype # float32
im = png.read_png_int("house.png")
print im.dtype # uint8
Run Code Online (Sandbox Code Playgroud)
最后,一致的行为,你可以使用PIL两个,png和jpg图像而不是依赖于matplotlib。
from PIL import Image
import numpy as np
im = np.asarray(Image.open("house.png"))
print im.dtype # uint8
im = np.asarray(Image.open("house.jpg"))
print im.dtype # uint8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4859 次 |
| 最近记录: |