Отображение изображения в оттенках серого с помощью matplotlib


Я пытаюсь отобразить изображение в оттенках серого с помощью matplotlib.pyplot.imshow(). Моя проблема заключается в том, что изображение в оттенках серого отображается в виде цветовой карты. Мне нужны оттенки серого, потому что я хочу рисовать поверх изображения с цветом.

Я читаю в изображении и конвертировать в оттенки серого с помощью изображение пила.открытый.)(конвертировать ("L")

image = Image.open(file).convert("L")

тогда я преобразовать изображение в матрицу, так что я могу легко сделать некоторые обработки изображений с помощью

matrix = scipy.misc.fromimage(image, 0)

однако, когда я делаю

figure()  
matplotlib.pyplot.imshow(matrix)  
show()

он отображает изображение с помощью цветовой карты (т. е. это не оттенки серого).

что я здесь делаю не так?

6 161

6 ответов:

следующий код загрузит изображение из файла image.png и отобразит его в оттенках серого.

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray')
plt.show()

Если вы хотите отобразить обратные оттенки серого, переключите cmap на cmap='gray_r'.

попробуйте использовать оттенки серого цвета?

например, что-то вроде

imshow(..., cmap=pyplot.cm.binary)

список цветных карт см. В разделе http://scipy-cookbook.readthedocs.org/items/Matplotlib_Show_colormaps.html

import matplotlib.pyplot as plt

вы также можете запустить один раз в коде

plt.gray()

это покажет изображения в оттенках серого по умолчанию

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()

попробуйте это:

import pylab
from scipy import misc

pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()

Я бы использовал метод get_cmap. Бывший.:

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))

ответ@unutbu довольно близок к правильному ответу.

по умолчанию plt.imshow () попытается масштабировать данные массива (MxN) до 0.0~1.0. А затем сопоставьте с 0~255. Для наиболее естественного изображения, это нормально, вы не увидите другого. Но если у вас узкий диапазон изображения значения пикселя, скажем, минимальный пиксель равен 156, а максимальный-234. Серое изображение будет выглядеть совершенно неправильно. Правильный способ показать изображение в сером цвете -

from matplotlib.colors import NoNorm
...
plt.imshow(img,cmap='gray',norm=NoNorm())
...

давайте посмотрим пример:

Это изображение origianl: оригинал

это использует дефолт норм, который не является ни одним: неправильная пос

это использование параметра NoNorm, который является ненормальным(): право пос