matplotlibのを使用して、グレースケールなどの表示画像
-
26-09-2019 - |
質問
私はの)の(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')