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

Python scipy.ndimage.imread和matplotlib.pyplot.imread之间有什么区别?,python,matplotlib,scipy,keras,Python,Matplotlib,Scipy,Keras,scipy.ndimage.imread刚刚在scipy中被弃用,所以我直接将代码切换到使用pyplot,但结果不一样。我正在为keras内置的学习算法导入图像-我原以为这将是1:1的变化-但事实并非如此-我训练得很好,在切换后,我的系统无法训练。有没有一位python大师可以解释两者的区别 Scipy返回: img_阵列:ndarray 不同的色带/通道存储在第三维中,以便灰色图像为MxN,RGB图像为MxNx3,以及 RGBA图像MxNx4。 Matplotlib返回: 返回值是numpy

scipy.ndimage.imread
刚刚在scipy中被弃用,所以我直接将代码切换到使用pyplot,但结果不一样。我正在为keras内置的学习算法导入图像-我原以为这将是1:1的变化-但事实并非如此-我训练得很好,在切换后,我的系统无法训练。有没有一位python大师可以解释两者的区别

Scipy返回:

img_阵列:ndarray 不同的色带/通道存储在第三维中,以便灰色图像为MxN,RGB图像为MxNx3,以及 RGBA图像MxNx4。

Matplotlib返回:

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

MWE:

从scipy导入ndimage
import_image=(ndimage.imread(“img.png”).astype(float)-
255.0 / 2) / 255.0
打印导入图像[0]
将matplotlib.pyplot作为plt导入
import_image=(plt.imread(“img.png”).astype(float)-
255.0 / 2) / 255.0
打印导入图像[0]

这里将是一个真正的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
可以看出

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

我认为一个主要区别在于png图像
plt.imread
有自己的功能来读取PNG,而
scipy.ndimage.imread
使用PIL。对于所有其他文件格式,这两个函数都应该使用PIL,所以我不希望有什么不同。关于您的实际问题,您当然可以向我们提供一个测试用例,以便人们能够重现行为。@importantanceofbeingernest请参阅使用MWE更新的-我使用灰度图像。您观察到的错误/问题在哪里?我应该从你的例子中吸取什么?您也可以使用推荐的库作为替代。但这可能不是关于解码,而是关于数组类型的决定。