2015-01-27 1 views
1

Я следующий this tutorial here где я копия вставленного первый образец кода:SciPy дисплей изображение выглядит как «тепловой кулачок»

from scipy import misc 
l = misc.lena() 
misc.imsave('lena.png', l) 

import matplotlib.pyplot as plt 
plt.imshow(l) 
plt.show() 

ожидаемый выход по данным сайта является:

image

Но это то, что я получаю:

enter image description here

Как вы можете видеть, есть проблема с цветами. Первое программирование с изображениями, поэтому я не знаю, что здесь происходит.

ответ

2

Ваша проблема заключается в том, что по умолчанию matplotlib использует цветную карту, которая не очень подходит для отображения изображений в оттенках серого. Это легко решается с помощью gray палитры:

plt.gray() # Switch to grayscale 
plt.imshow(l) 
plt.show() 

Что-то еще, чтобы быть в курсе, что по умолчанию, изображение с интерполяцией. Это означает, что если вы увеличите масштаб, вы не увидите блокированных пикселей, которые вы ожидаете, а «размытое» изображение. Вы можете остановить это с помощью опции interpolation=:

plt.imshow(image, interpolation='none') 
0

Вам нужно изменить карту цвета, который используется для отображения изображения. Если изменить

plt.imshow(l) 

в

plt.gray() 
plt.imshow(l) 

Он должен показать вам правильный результат. Обратите внимание, что в этом случае цветовой код устанавливается на уровни серого на глобальном уровне. Если вы хотите изменить только цветовой код для одного вызова, назначьте соответствующий цветовой код атрибуту «cmap» вызова «imshow (l)».

+0

Это может сработать, но не по правильным причинам. 'pylab.gray()' возвращает 'None', а не colormap. –

+0

Вы совершенно правы. Я отредактировал свой ответ. –

0

В Matplotlib есть много включенных цветовых палитр. Итак, когда вы используете график imshow, вы можете выбрать способ: map оттенки серого (или значения интенсивности на вашем массиве) до градиента цветов.

по умолчанию Colormap является «струи», но вы можете, например, использовать gray палитру так:

import matplotlib.pyplot as plt 
from matplotlib import cm 

plt.imshow(l, cmap=cm.gray) 
plt.show() 

Или использовать «тепло», или «кость», или «розовый», чтобы получить разные цветные изображения.