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

Что делает plt.imshow(img1, 'grey')? Я попытался найти в Google, и все, что я мог понять, это то, что "серый" аргумент - это карта цветов. Но мое изображение (рис есть на сайте. См. Ссылку) не отображается в оттенках серого. Я попытался удалить второй аргумент. Таким образом, код был похож на plt.imshow(img1). Это выполняет. Изображение остается таким же, как и раньше. Тогда что делает второй аргумент "серый"? Может кто-нибудь объяснить мне все это? Любая помощь приветствуется. Благодарю.

PS. Я совершенно новичок в Matplotlib

1 ответ

Решение

Когда img1 имеет форму (M,N,3) или же (M,N,4), значения в img1 интерпретируются как значения RGB или RGBA. В этом случае карта игнорируется. В соответствии с 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,)

введите описание изображения здесь

Другие вопросы по тегам