web-dev-qa-db-fra.com

OpenCV donnant une mauvaise couleur aux images colorées lors du chargement

Je charge une image couleur dans Python OpenCV et la trace. Cependant, l'image que je reçois a ses couleurs toutes mélangées. 

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 originale:  enter image description here

Et voici l'image tracée:  enter image description here

32
bholagabbar

OpenCV utilise BGR comme ordre de couleur par défaut pour les images, matplotlib utilise le format RVB. Lorsque vous affichez une image chargée avec OpenCv dans matplotlib, les canaux sont rétablis. 

Le moyen le plus simple de résoudre ce problème consiste à utiliser OpenCV pour le reconvertir explicitement en RVB, comme vous le faites lorsque vous créez une image en niveaux de gris.

RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

Et utilisez ensuite cela dans votre intrigue.

73
TobyD