web-dev-qa-db-ja.com

skimage:skimage.colorのrgb2grayが色付きの画像になるのはなぜですか?

次を使用して画像をグレースケールに変換しようとしたとき:

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

Original

グレースケールではないカラー画像。 gray

関数が画像をグレースケールに変換しないのはなぜですか?

20
kwotsin

結果の画像はグレースケールです。ただし、imshowは、デフォルトでは、一種のヒートマップ(vidrisと呼ばれる)を使用して画像の強度を表示します。以下に示すように、グレースケールカラーマップを指定するだけです。

plt.imshow(mountain_r, cmap="gray")

可能なすべてのカラーマップについては、 colormap reference をご覧ください。

27
Tony Power