Matplotlib: какова функция cmap в imshow?
Я пытаюсь изучить opencv с помощью python и наткнулся на этот код ниже:
import cv2
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv2.imread('opencv_logo.png')
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
источник: http://docs.opencv.org/master/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#exercises
что делает plt.imshow(img1, 'серый') делать? Я попытался найти Google, и все, что я мог понять, было то, что "серый" аргумент был цветной картой. Но мой образ (рис есть на сайте. см. ссылку) не отображается в оттенках серого. Я попытался удалить второй аргумент. Таким образом, код был похож на plt.imshow(img1). Он исполняется. Изображение остается прежним. Тогда что же делает второй аргумент "серый"? Может кто-нибудь объяснить мне все это? Любая помощь приветствуется. Спасибо.
PS. Я совершенно новичок в Matplotlib
1 ответов
, когда img1 имеет форму (M,N,3) или (M,N,4) значения img1 интерпретируются как значения RGB или RGBA. В этом случае cmap игнорируется. Пер the help(plt.imshow) строкой документации:
, еслиcmap:
~matplotlib.colors.Colormap, необязательно, по умолчанию: нетесли нет, по умолчанию rc
image.cmapзначение.cmapигнорируется, когдаXимеет RGB (A) информация
img массив формы (M,N), затем cmap управляет цветовой картой, используемой для отображения значений.
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axes_grid1 as axes_grid1
np.random.seed(1)
data = np.random.randn(10, 10)
fig = plt.figure()
grid = axes_grid1.AxesGrid(
fig, 111, nrows_ncols=(1, 2), axes_pad = 0.5, cbar_location = "right",
cbar_mode="each", cbar_size="15%", cbar_pad="5%",)
im0 = grid[0].imshow(data, cmap='gray', interpolation='nearest')
grid.cbar_axes[0].colorbar(im0)
im1 = grid[1].imshow(data, cmap='jet', interpolation='nearest')
grid.cbar_axes[1].colorbar(im1)
plt.savefig('/tmp/test.png', bbox_inches='tight', pad_inches=0.0, dpi=200,)
