次を使用して画像をグレースケールに変換しようとしたとき:
from skimage.io import imread
from skimage.color import rgb2gray
mountain_r = rgb2gray(imread(os.getcwd() + '/mountain.jpg'))
#Plot
import matplotlib.pyplot as plt
plt.figure(0)
plt.imshow(mountain_r)
plt.show()
グレースケールではなく、奇妙な色の画像が表示されました。
関数を手動で実装しても、同じ結果が得られます。カスタム関数は次のとおりです。
def rgb2grey(rgb):
if len(rgb.shape) is 3:
return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
else:
print 'Current image is already in grayscale.'
return rgb
関数が画像をグレースケールに変換しないのはなぜですか?
結果の画像はグレースケールです。ただし、imshow
は、デフォルトでは、一種のヒートマップ(vidrisと呼ばれる)を使用して画像の強度を表示します。以下に示すように、グレースケールカラーマップを指定するだけです。
plt.imshow(mountain_r, cmap="gray")
可能なすべてのカラーマップについては、 colormap reference をご覧ください。