283

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()

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

私はここで何が間違っているのですか?

4

9 に答える 9

448

次のコードは、ファイルから画像をロードし、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'ます。

于 2010-09-29T16:40:37.677 に答える
38

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

例:

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

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

于 2010-09-29T16:39:14.823 に答える
22

import matplotlib.pyplot as plt

コードで1回実行することもできます

plt.gray()

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

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()
于 2012-07-22T20:49:23.293 に答える
15

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

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))
于 2015-12-02T16:24:32.313 に答える
13

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

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

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

例を見てみましょう:

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

これはdefaulnorm設定を使用しています。これはNoneです: 間違った写真

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

于 2018-03-06T08:39:40.343 に答える
10

これを試して:

import pylab
from scipy import misc

pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()
于 2012-03-09T15:00:54.870 に答える
9

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

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
于 2019-04-15T05:37:55.533 に答える
1

画像が紫と黄色の場合。

画像の保存方法を変更する:
plt.imsave(...., cmap='gray')

于 2021-07-21T10:56:37.423 に答える
0
plt.imshow(img[:,:,0], cmap='gray')

plt.imshow(img[:,:,1], cmap='gray')

plt.imshow(img[:,:,2], cmap='gray')

動作するはずです。しかし、このアプローチの問題は、それが真の灰色ではないということです。RGBチャンネルの1つだけをグレーに変更します。

以下をご覧ください。

from sklearn.datasets import load_sample_image
flower = load_sample_image("flower.jpg")

plt.subplot(1,4,1)
plt.imshow(flower)
plt.axis("off")
plt.title("Original")

# R level to gray
plt.subplot(1,4,2)
plt.imshow(flower[:,:,0], cmap='gray')
plt.axis("off")
plt.title("R to gray")


# G leval to gray
plt.subplot(1,4,3)
plt.imshow(flower[:,:,1], cmap='gray')
plt.axis("off")
plt.title("R to gray")

# B leval to gray
plt.subplot(1,4,4)
plt.imshow(flower[:,:,2], cmap='gray')
plt.axis("off")
plt.title("R to gray")

plt.show()

【結果画像】

于 2021-11-16T06:00:59.663 に答える