scipy.ndimage.imread 和 matplotlib.pyplot.imread 有什么区别?

ash*_*ley 2 python matplotlib scipy keras

scipy.ndimage.imread刚刚在 scipy 中被弃用,所以我直接将代码切换为使用 pyplot - 但结果不一样。我正在为 keras 内置的学习算法导入图像 - 我认为这将是一个 1 对 1 的更改 - 但事实并非如此 - 我训练得很好,切换后我的系统没有训练。有没有一个蟒蛇大师可以解释有什么区别?

Scipy 返回:

img_array : ndarray 不同的色带/通道存储在第三维中,例如灰度图像是 MxN,RGB 图像 MxNx3 和 RGBA 图像 MxNx4。 scipy 文档

Matplotlib 返回:

返回值是一个 numpy.array。对于灰度图像,返回数组为 MxN。对于 RGB 图像,返回值为 MxNx3。对于 RGBA 图像,返回值为 MxNx4。 matplotlib 文档

MWE:

from scipy import ndimage
import_image = (ndimage.imread("img.png").astype(float) - 
                                          255.0 / 2) / 255.0
print import_image[0]

import matplotlib.pyplot as plt
import_image = (plt.imread("img.png").astype(float) - 
                                          255.0 / 2) / 255.0

print import_image[0]
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 5

这将是一个真正的 mcve:

import matplotlib.pyplot as plt
import numpy as np
import scipy.ndimage

im = np.random.rand(20,20)
plt.imsave("img.png",im)

### Scipy
i2 = scipy.ndimage.imread("img.png")
print i2.shape, i2.min(), i2.max(), i2.dtype
# (20L, 20L, 4L) 1 255 uint8

### Matplotlib
i3 = plt.imread("img.png").astype(float)
print i3.shape, i3.min(), i3.max(), i3.dtype
# (20L, 20L, 4L) 0.00392156885937 1.0 float64
Run Code Online (Sandbox Code Playgroud)

可以看出

  • scipy.ndimage.imread创建一个 numpyint类型的数组,范围从0..255while
  • pyplot.imread创建一个浮点类型的 numpy 数组,范围从0. .. 1..