OpenCV gibt farbigen Bildern beim Laden eine falsche Farbe


73

Ich lade ein Farbbild in Python OpenCV und zeichne dasselbe. Das Bild, das ich bekomme, hat jedoch alle Farben durcheinander.

Hier ist der 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()

Hier ist das Originalbild: Geben Sie hier die Bildbeschreibung ein

Und hier ist das geplottete Bild: Geben Sie hier die Bildbeschreibung ein

Antworten:


157

OpenCV verwendet BGR als Standardfarbreihenfolge für Bilder, matplotlib verwendet RGB. Wenn Sie ein mit OpenCv geladenes Bild in matplotlib anzeigen, werden die Kanäle von hinten nach vorne angezeigt.

Die einfachste Möglichkeit, dies zu beheben, besteht darin, OpenCV zu verwenden, um es explizit wieder in RGB zu konvertieren, ähnlich wie beim Erstellen des Graustufenbilds.

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

Und dann verwenden Sie das in Ihrer Handlung.


7
Sie können es auch in einer Zeile verwenden, wenn Sie die Datei lesenimg = cv2.imread('lena_caption.png', cv2.COLOR_BGR2RGB)
Spiral Out

17

Alternativ zur vorherigen Antwort können Sie (etwas schneller) verwenden

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 pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1 Schleife)

%timeit [cv2.imread(f)[...,::-1] for f in files]
220 ms ± 1,81 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1 Schleife)


3
NEIN. Und das ist der Grund: answers.opencv.org/question/219040/…
baldr

Könnten Sie bitte erklären, wie es sich von RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
Avinash Singh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.