【问题标题】:Why does plt.imshow(im, cmap='gray') not show a grayscale image?为什么 plt.imshow(im, cmap='gray') 不显示灰度图像?
【发布时间】:2017-10-14 00:49:33
【问题描述】:

我正在尝试对图像运行 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()

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

【问题讨论】:

    标签: python numpy matplotlib scipy


    【解决方案1】:

    数组im 可能是一个3-D 数组,形状为(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 通道。)

    【讨论】:

      【解决方案2】:

      像这样在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()
      

      【讨论】:

      • 谢谢。它变成了灰度。
      猜你喜欢
      • 2017-05-07
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多