OpenCV donner mauvaise couleur des images en couleur sur le chargement
Je suis le chargement d'une image en couleurs en Python OpenCV et de tracer le même. Cependant, l'image que je reçois a ses couleurs tout mélangé.
Voici le code:
import cv2
import numpy as np
from numpy import array, arange, uint8
from matplotlib import pyplot as plt
img = cv2.imread('lena_caption.png', cv2.IMREAD_COLOR)
bw_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
images = []
images.append(img)
images.append(bw_img)
titles = ['Original Image','BW Image']
for i in xrange(len(images)):
plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
Voici l'image d'origine:
Et voici le tracé de l'image:
Vous devez vous connecter pour publier un commentaire.
OpenCV utilise BGR par défaut ordre des couleurs pour les images, matplotlib RVB. Lorsque vous affichez une image chargée avec OpenCv dans matplotlib les chaînes de l'arrière vers l'avant.
La façon la plus simple de corriger cela est d'utiliser OpenCV explicitement convertir RVB, comme lors de la création de l'image en niveaux de gris.
Et utilisez-la dans votre parcelle de terrain.
img = cv2.imread('lena_caption.png', cv2.COLOR_BGR2RGB)
Comme une alternative à la réponse précédente, vous pouvez utiliser (un peu plus rapide)
img = cv2.imread('lena_caption.png')[...,::-1]
%timeit [cv2.cvtColor(cv2.imread(f), cv2.COLOR_BGR2RGB) for f in files]
231 ms ± 3.08 ms par ligne (moyenne ± std. dev. de 7 pistes, 1 boucle de chaque)
%timeit [cv2.imread(f)[...,::-1] for f in files]
220 ms ± 1.81 ms par ligne (moyenne ± std. dev. de 7 pistes, 1 boucle de chaque)