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