Отображение изображения в оттенках серого с помощью matplotlib
Я пытаюсь отобразить изображение в оттенках серого с помощью matplotlib.pyplot.imshow(). Моя проблема заключается в том, что изображение в оттенках серого отображается в виде цветовой карты. Мне нужны оттенки серого, потому что я хочу рисовать поверх изображения с цветом.
Я читаю в изображении и конвертировать в оттенки серого с помощью изображение пила.открытый.)(конвертировать ("L")
image = Image.open(file).convert("L")
тогда я преобразовать изображение в матрицу, так что я могу легко сделать некоторые обработки изображений с помощью
matrix = scipy.misc.fromimage(image, 0)
однако, когда я делаю
figure()
matplotlib.pyplot.imshow(matrix)
show()
он отображает изображение с помощью цветовой карты (т. е. это не оттенки серого).
что я здесь делаю не так?
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, который является ненормальным(): право пос