为什么plt.imshow(im,cmap =' grey')没有显示灰度图像?

时间:2017-10-14 00:49:33

标签: python numpy matplotlib scipy

我正在尝试对图像运行DCT变换。我试图使用以下代码使我的图像成为灰度图像:

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

from numpy import pi
from numpy import sin
from numpy import zeros
from numpy import r_
from scipy import signal
from scipy import misc
import matplotlib.pylab as pylab

#matplotlib inline
pylab.rcParams['figure.figsize'] = (20.0, 7.0)

im = misc.imread("indoorPictureResize.jpg")

#show the image
f = plt.figure()
plt.imshow(im,cmap='gray')
plt.show()

但是我收到了图片,但它的颜色通道没有改变。我做错了什么或者我应该改变什么?

2 个答案:

答案 0 :(得分:3)

数组im可能是一个三维数组,形状为(m, n, 3)(m, n, 4)。检查im.shape

来自imshow文档字符串:cmap如果X是3-D”,则会被忽略。

要使用色彩映射,您必须将二维数组传递给imshow。例如,您可以绘制其中一个颜色通道,例如im[:,:,0],或绘制三个通道im.mean(axis=2)的平均值。 (但如果im的形状为(m, n, 4),则您可能不希望在平均值中包含Alpha通道。)

答案 1 :(得分:0)

scipy.misc.imread中添加mode,如下所示:

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

from numpy import pi
from numpy import sin
from numpy import zeros
from numpy import r_
from scipy import signal
from scipy import misc
import matplotlib.pylab as pylab

#matplotlib inline
pylab.rcParams['figure.figsize'] = (20.0, 7.0)

im = misc.imread("indoorPictureResize.jpg", mode="L")

#show the image
f = plt.figure()
plt.imshow(im,cmap='gray')
plt.show()