web-dev-qa-db-fra.com

matplotlib imshow couleurs déformantes

J'ai essayé d'utiliser la fonction imshow de matplotlib.pyplot et cela fonctionne parfaitement pour afficher des images en niveaux de gris. Lorsque j'ai essayé de représenter des images RVB, cela change les couleurs, montrant une couleur plus bleue.

Voir un exemple:

import cv2
import matplotlib.pyplot as plt
lena=cv2.imread("lena.jpg")
plt.imshow(lena)
plt.show()

L'image résultante est quelque chose comme this

Alors que l'image d'origine est this

S'il s'agit d'un élément lié à la palette de couleurs, existe-t-il un moyen de le faire fonctionner avec des images RVB?

10
dberga

Cela a fonctionné pour moi:

plt.imshow(lena[:,:,::-1]) # RGB-> BGR

Même idée mais une approche plus agréable et plus robuste consiste à utiliser "Ellipsis" proposé par @ rayryeng :

plt.imshow(lena[...,::-1])
11
AGN Gazer

OpenCV représente les images en BGR par opposition au RVB que nous attendons. Comme il est dans l'ordre inverse, vous avez tendance à voir la couleur bleue dans les images. Essayez d'utiliser la ligne suivante (sous le commentaire dans le code) pour convertir de BGR en RVB:

import cv2
import matplotlib.pyplot as plt
lena=cv2.imread("lena.jpg")
#plt.imshow(lena)
#plt.axis("off")
#Converts from BGR to RGB
plt.imshow(cv2.cvtColor(lena, cv2.COLOR_BGR2RGB))
plt.show()
10
Nivii1406