Matplotlib kullanarak görüntüyü gri tonlama olarak görüntüle


232

Matplotlib.pyplot.imshow () kullanarak gri tonlamalı bir görüntü görüntülemeye çalışıyorum . Benim sorunum gri tonlamalı görüntünün bir renk haritası olarak görüntülenmesidir. Gri tonlamaya ihtiyacım var çünkü görüntünün üstüne renkli çizmek istiyorum.

Resimde okudum ve PIL'in Image.open () yöntemini kullanarak gri tonlamaya dönüştürdüm ("L")

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

Sonra görüntüyü bir matrise dönüştürüyorum, böylece

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

Ancak, yaptığımda

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

görüntüyü bir renk haritası kullanarak görüntüler (yani gri tonlamalı değildir).

Burada neyi yanlış yapıyorum?

Yanıtlar:


369

Aşağıdaki kod, bir dosyadan bir resim yükler image.pngve bunu gri tonlamalı olarak görüntüler.

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

Ters gri tonlamayı görüntülemek istiyorsanız, cmap olarak değiştirin cmap='gray_r'.


4
@jay: Bu belge dizesine göre , "Burada listelenen renk haritalarının eklenerek geri alınabileceğini unutmayın _r."
unutbu

31
Uyarı matplotlib kullanmak istemiyorsanız piksel ölçeği yoğunluğunu ayarlayın:plt.imshow(im_gray,cmap='gray', vmin = 0, vmax = 255)
themadmax 21:16


17

import matplotlib.pyplot as plt

Kodunuzda bir kez de çalıştırabilirsiniz

plt.gray()

Bu, varsayılan olarak gri tonlamalı görüntüleri gösterir

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

Hangi kütüphane için gray()veya kullanıyorsunuz grey()?
SherylHohman

@SherylHohman, gray... standart Amerikan yazımı ve gri aynı renk için İngiliz yazımıdır .
Cloud Cho

12

Get_cmap yöntemini kullanırdım. Ör .:

import matplotlib.pyplot as plt

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

11

@ unutbu'nun cevabı doğru cevaba oldukça yakın.

Varsayılan olarak, plt.imshow (), (MxN) dizi verilerinizi 0,0 ~ 1,0 olarak ölçeklendirmeye çalışır. Ve sonra 0 ~ 255'e eşleyin. Çoğu doğal çekilen görüntü için, bu iyi, farklı bir şey görmeyeceksiniz. Ancak dar piksel değeri aralığınız varsa, min pikselin 156 ve maksimum pikselin 234 olduğunu varsayalım. Gri görüntü tamamen yanlış görünecektir. Bir görüntüyü gri renkle göstermenin doğru yolu

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

Bir örnek görelim:

bu origianl görüntüsü: orijinal

Bu varsayılan: Norm ayarını kullanıyor. Yok: yanlış resim

Bu, NoNorm () olan NoNorm ayarını kullanıyor: right pic


9

bunu dene:

import pylab
from scipy import misc

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

hayır pylab.grey(), belki kaldırıldı?
Lyndon White

4

İnterpolasyon kullanmayın ve griye ayarlayın.

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.