質問

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

私が使用してグレースケールに画像や変換で読むの PILのImage.open()。変換( "L")

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

はその後、私は容易に使用するいくつかの画像処理を行うことができるように行列に画像を変換する

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

しかし、私が行うとき、

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

が(すなわち、それは、グレースケールではない)カラーマップを使用して画像を表示する。

私はここで間違っているのでしょうか?

役に立ちましたか?

解決

次のコードは、ファイル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='gray_r'にCMAPを切り替えます。

他のヒント

グレースケールカラーマップを使用してみてください?

例えば。

のようなもの
imshow(..., cmap=pyplot.cm.binary)

カラーマップのリストについては、 http://scipy-cookbook.readthedocs.org /items/Matplotlib_Show_colormaps.htmlする

import matplotlib.pyplot as plt

あなたはまた、あなたのコード内で一度実行することができます。

plt.gray()

これはデフォルトとしてグレースケールで画像が表示されます。

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

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

import matplotlib.pyplot as plt

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

これを試してみてください

import pylab
from scipy import misc

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

@ unutbuの答えは非常に近い正解にある。

デフォルトでは、plt.imshow()0.0〜1.0に、あなたの(MXN)配列データをスケーリングしようとします。そして、0〜255にマッピングします。最も自然な撮影した画像については、これは結構です、あなたは異なる表示されません。あなたはピクセル値画像の狭い範囲を持っている場合しかし、分画素が156で、最大のピクセルが234グレー画像意志ルックスは完全に間違っていると言います。 正しい方法は、グレーの画像を表示する

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

レッツは、例を参照してください。

これはorigianlイメージです。

これはNoneですdefaul規範の設定を、使用しています: 間違っPICする

これはNoNorm(あるNoNorm設定)を用いています。 右PICする

を使用灰色のない補間セット。

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top