Ihr Problem besteht darin, dass skimage.io.imread
lädt das Bild als RGB (oder RGBA), aber OpenCV geht davon aus, dass das Bild BGR oder BGRA (BGR ist das Standard-OpenCV-Farbformat). Dies bedeutet, dass blaue und rote Ebenen umgedreht werden.
Versuchen wir es mit dem folgenden einfachen Testbild:
Lassen Sie uns zuerst Ihren ursprünglichen Algorithmus ausprobieren:
%Vor%Wir erhalten folgendes Ergebnis:
Wie Sie sehen können, sind rote und blaue Kanäle sichtbar vertauscht.
Der erste Ansatz, vorausgesetzt Sie möchten skimage weiterhin verwenden, um cv2 zu lesen, verwenden Sie cv2.cvtColor
um von RGB in BGR zu konvertieren.
Da die neuen OpenCV-Dokumente die Python-Syntax nicht erwähnen, können Sie in diesem Fall auch die entsprechende Referenz für 2.4.x .
%Vor%Jetzt erhalten wir die folgende Ausgabe:
Eine Alternative ist, einfach OpenCV zu verwenden - cv2.imread
zu laden das Bild. In diesem Fall arbeiten wir nur mit BGR-Bildern.
Hinweis: Wenn keine Flags angegeben werden, bedeutet dies, dass cv2.IMREAD_COLOR
standardmäßig verwendet wird - d. h. das Bild wird immer als 3-Kanal-Bild geladen (alle möglichen Alpha-Kanäle werden gelöscht).
Aus Ihrem Screenshot scheint es, dass Sie ein 4-Kanal-Bild haben. Dies würde RGBA in skimage und BGRA in OpenCV bedeuten. Die Prinzipien wären ähnlich.
cv2.COLOR_RGBA2BGRA
cv2.imread
mit dem Flag cv2.IMREAD_UNCHANGED
Tags und Links python opencv opencv3.0 ipython-notebook