2016-09-04 54 views
17

Załaduję obraz kolorowy w Pythonie OpenCV i kreślę to samo. Jednak obraz, który otrzymałem, ma pomieszane kolory.OpenCV podając niewłaściwy kolor kolorowym obrazom przy ładowaniu

Oto kod:

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

Oto obraz oryginału: enter image description here

I tu jest wykreślane image: enter image description here

Odpowiedz

33

OpenCV wykorzystuje BGR jako domyślnego koloru dla images, matplotlib używa RGB. Kiedy wyświetlisz obraz załadowany OpenCv w matplotlib, kanały powrócą do przodu.

Najprostszym sposobem naprawy jest użycie OpenCV do jawnej konwersji z powrotem do RGB, podobnie jak w przypadku tworzenia obrazu w skali szarości.

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

A następnie użyj tego w swojej działce.