matplotlibを使用して画像をグレースケールとして表示する


231

matplotlib.pyplot.imshow()を使用してグレースケール画像を表示しようとしています。私の問題は、グレースケールイメージがカラーマップとして表示されることです。画像の上に色を付けたいので、グレースケールが必要です。

画像を読み込み、PILのImage.open()。convert( "L")を使用してグレースケールに変換します

image = Image.open(file).convert("L")

次に、画像をマトリックスに変換して、簡単に画像処理を実行できるようにします

matrix = scipy.misc.fromimage(image, 0)

しかし、私がするとき

figure()  
matplotlib.pyplot.imshow(matrix)  
show()

カラーマップを使用して画像を表示します(つまり、グレースケールではありません)。

ここで何が悪いのですか?

回答:


368

次のコードは、ファイルから画像をロードし、image.pngグレースケールとして表示します。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()

逆グレースケールを表示する場合は、cmapをに切り替えcmap='gray_r'ます。


4
@jay:このドキュメントの文字列ごとに、「ここにリストされているカラーマップは、を追加することで反転できることに注意してください_r。」
unutbu 2016年

31
あなたが使用したくない場合は、警告がピクセルスケール強度を調整matplotlibの:plt.imshow(im_gray,cmap='gray', vmin = 0, vmax = 255)
themadmax

30

グレースケールカラーマップを使用してみますか?

たとえば、次のようなもの

imshow(..., cmap=pyplot.cm.binary)

カラーマップのリストについては、http: //scipy-cookbook.readthedocs.org/items/Matplotlib_Show_colormaps.htmlを参照してください


17

import matplotlib.pyplot as plt

コードで一度実行することもできます

plt.gray()

これにより、デフォルトで画像がグレースケールで表示されます

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()

どちらのライブラリを使用していますgray()grey()
SherylHohman 2017年

@SherylHohman、それはgray...同じ色の灰色は標準的なアメリカの綴りであり、灰色は英国の綴りです。
クラウドチョー

12

get_cmapメソッドを使用します。例:

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))

11

@unutbuの答えは正しい答えに非常に近いです。

デフォルトでは、plt.imshow()は(MxN)配列データを0.0〜1.0にスケーリングしようとします。そして、0〜255にマッピングします。ほとんどの自然な撮影画像では、これで問題ありません。別の画像は表示されません。しかし、ピクセル値の画像の範囲が狭い場合、最小ピクセルは156、最大ピクセルは234とします。灰色の画像は完全に間違って見えます。画像を灰色で表示する正しい方法は

from matplotlib.colors import NoNorm
...
plt.imshow(img,cmap='gray',norm=NoNorm())
...

例を見てみましょう:

これは元の画像です: オリジナル

これはデフォルトの標準設定を使用していますが、None: 間違った写真です

これはNoNorm()であるNoNorm設定を使用しています: 右の写真


9

これを試して:

import pylab
from scipy import misc

pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()

はありませpylab.grey()ん。削除された可能性がありますか?
リンドンホワイト

4

補間を使用せず、灰色に設定します。

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.