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,)