Ich lade in ein Farbbild in Python OpenCV und zeichne das gleiche. Das Bild, das ich bekomme, hat jedoch alle Farben gemischt.
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()
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 wieder nach vorne verschoben.
Die einfachste Möglichkeit, dies zu beheben, ist die Verwendung von OpenCV, um es explizit zurück 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.
Alternativ zur vorherigen Antwort können Sie (etwas schneller)
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, je 1 Schleife)
%timeit [cv2.imread(f)[...,::-1] for f in files]
220 ms ± 1,81 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, je 1 Schleife)