Afbeelding weergeven als grijswaarden met matplotlib

Ik probeer een grijswaardenafbeelding weer te geven met matplotlib.pyplot.imshow(). Mijn probleem is dat de grijswaardenafbeelding wordt weergegeven als een kleurenkaart. Ik heb de grijswaarden nodig omdat ik met kleur bovenop de afbeelding wil tekenen.

Ik lees de afbeelding in en converteer naar grijswaarden met behulp van PIL’s Image.open().convert(“L”)

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

Vervolgens converteer ik de afbeelding naar een matrix zodat ik gemakkelijk wat beeldverwerking kan doen met

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

Maar als ik dat doe

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

het geeft de afbeelding weer met een kleurenkaart (d.w.z. het is geen grijswaarden).

Wat doe ik hier verkeerd?


Antwoord 1, autoriteit 100%

De volgende code laadt een afbeelding uit een bestand image.pngen geeft deze weer als grijswaarden.

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

Als u de inverse grijswaarden wilt weergeven, schakelt u de cmap over naar cmap='gray_r'.


Antwoord 2, autoriteit 8%

Probeer je een kleurenkaart in grijstinten te gebruiken?

Bijvoorbeeld zoiets als

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

Voor een lijst met kleurenkaarten, zie http://scipy-cookbook.readthedocs.org /items/Matplotlib_Show_colormaps.html


Antwoord 3, autoriteit 4%

import matplotlib.pyplot as plt

U kunt ook één keer uitvoeren in uw code

plt.gray()

Hiermee worden de afbeeldingen standaard in grijstinten weergegeven

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

Antwoord 4, autoriteit 3%

Ik zou de methode get_cmap gebruiken. Bijv.:

import matplotlib.pyplot as plt
plt.imshow(matrix, cmap=plt.get_cmap('gray'))

Antwoord 5, autoriteit 3%

@unutbu’s antwoord komt redelijk dicht in de buurt van het juiste antwoord.

Standaard zal plt.imshow() proberen uw (MxN) arraygegevens te schalen naar 0,0~1,0. En dan toewijzen aan 0~255. Voor de meeste natuurlijk gemaakte foto’s is dit prima, je zult niet anders zien. Maar als je een smal bereik van de pixelwaarde hebt, zeg dan dat de min pixel 156 is en de max pixel 234. De grijze afbeelding ziet er totaal verkeerd uit.
De juiste manier om een ​​afbeelding in grijs weer te geven is

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

Laten we een voorbeeld bekijken:

dit is de originele afbeelding:
origineel

dit gebruikt de standaard norminstelling, die Geen is:
verkeerde foto

dit gebruikt de instelling NoNorm, namelijk NoNorm():
rechter foto


Antwoord 6, autoriteit 2%

probeer dit:

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

Antwoord 7, autoriteit 2%

Gebruik geen interpolatie en zet op grijs.

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')

Antwoord 8

Als de afbeelding paars & gele kleur.

manier om afbeelding op te slaan:
plt.imsave(...., cmap='gray')

LEAVE A REPLY

Please enter your comment!
Please enter your name here

1 + 7 =

Other episodes