Я рисую версию этого изображения в оттенках серого:
ИСТОЧНИК: http://matplotlib.org/examples/pylab_examples/griddata_demo.html
Я использовал следующий код:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from PIL import Image
file_name = 'griddata_demo.png'
def func_grey(fname):
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap = cm.Greys_r)
plt.show()
func_grey(file_name)
Отображение изображения в градациях серого с использованием matplotlib
Установка, над которой я работаю, имеет python 2.7 и Pandas, и я установил Pillow с простой установкой.
Справочная информация об изображении и требованиях:
- Изображение взято из данных, найденных здесь. В идеале оттенки серого версия этого изображения должна быть сгенерирована непосредственно из этого необработанного данные. т.е. не сохраняйте его как цветное изображение, а затем пытайтесь преобразовать в оттенки серого - скорее, просто создайте версию графика в оттенках серого.
- Я не знаю цвета, соответствующие z-значениям - эти цвета можно устанавливать произвольно.
- Цветовая карта изображения также может быть выбрана произвольно - никаких предпочтений. Это версия в оттенках серого, которая вызывает беспокойство.
Мой вопрос связан с цветовой схемой, показанной на палитре цветов. Мне нужно отобразить цветовую схему, в которой цветовая полоса имеет цвета от светло-серого (самая низкая интенсивность) до темно-серого (самая высокая интенсивность).
После выполнения вышеуказанного кода создается изображение в оттенках серого. На цветной полосе изображения в оттенках серого уровень интенсивности -0,36 - темно-серый. При 0,00 он светло-серый. Но тогда 0,48 тоже темно-серый.
Вопрос: Можно ли изменить цветовую карту так, чтобы -0,36 был светло-серым, а 0,48 - темно-серым? Я имею в виду, можно ли отображать на шкале палитры от светлого к темному?
2 ответа
Я думаю, что этот вопрос может быть о том, как использовать палитру в оттенках серого в matplotlib. Если так, то все просто. Вот пример использования разных цветовых карт (на основе кода для операционного изображения):
from numpy.random import uniform, seed
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
import numpy as np
# make up data.
#npts = int(raw_input('enter # of random points to plot:'))
def f(spi, the_colormap):
plt.subplot(spi)
seed(0)
npts = 200
x = uniform(-2, 2, npts)
y = uniform(-2, 2, npts)
z = x*np.exp(-x**2 - y**2)
xi = np.linspace(-2.1, 2.1, 100)
yi = np.linspace(-2.1, 2.1, 200)
zi = griddata(x, y, z, xi, yi, interp='linear')
CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
CS = plt.contourf(xi, yi, zi, 15, cmap=the_colormap,
vmax=abs(zi).max(), vmin=-abs(zi).max())
plt.colorbar() # draw colorbar
# plot data points.
plt.scatter(x, y, marker='o', c='b', s=5, zorder=10)
plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.title('griddata test (%d points)' % npts)
f(131, plt.cm.rainbow)
f(132, plt.cm.gray)
f(133, plt.cm.hot)
plt.show()
Если кто-то действительно хочет преобразовать в оттенки серого с помощью PIL (гораздо менее благоприятная, но иногда необходимая задача), лучше всего начать с цветовой карты, которая имеет монотонную яркость, как hot
выше, но не rainbow
. Кроме того, в комментариях я предложил использовать cubehelix
, но это не стандартно для matplotlib, вместо этого см. здесь . См. здесь для изображения доступных цветовых карт matplotlib.
Это решение работает для меня и намного проще
from PIL import Image
im = Image.open("image.png")
im.convert('L').show()
im.convert('L').save("image.png")
Обратите внимание, что если вы хотите смешивать типы файлов, вы можете (например, .png в .jpg)
Похожие вопросы
Связанные вопросы
Новые вопросы
image
Тег изображения предназначен для вопросов, связанных с загрузкой, форматированием, сохранением, сжатием и отображением изображений в контексте исходного кода. Этот тег также следует использовать для помощи при использовании различных библиотек изображений. Вопросы о конкретных форматах изображений должны включать теги для этих форматов. Включите теги, чтобы указать, относится ли вопрос к конвертации, обработке и т. Д.
0
ярче, чем красный или синий в крайних точках .. вы можете просто увидеть это, так что не вините свой конвертер). Поэтому вместо преобразования с использованием яркости вам нужно инвертировать исходную палитру. Или, если вы можете создать цветное изображение с нуля и вам не нужно создавать существующее изображение, выберите другую карту цветов, напримерhot
, или кубическую спираль и т. д.