it-swarm.com.de

OpenCV-Fehler - cv2.cvtcolor

Ich bin ein Neuling bei openCV und stecke bei diesem Fehler ohne Auflösung fest. Ich versuche, ein Bild aus dem BGR-Format in das Graustufenformat zu konvertieren.

img = cv2.imread('path//to//image//file')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Das scheint gut zu funktionieren. Ich habe den Datentyp der Variable img überprüft, die sich als numpy ndarray und die Form (100,80,3) herausstellt. Wenn ich jedoch ein bereits vorhandenes Bild im Code des Datentyps numpy ndarray und mit den gleichen Abmessungen als Eingabe für die Funktion cvtColor gebe, wird der folgende Fehler angezeigt:

Error: Assertion failed (depth == 0 || depth == 2 || depth == 5) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp, line 11109
cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp:11109: error: (-215) depth == 0 || depth == 2 || depth == 5 in function cv::cvtColor

Der Code für den zweiten Fall lautet (hier einen benutzerdefinierten np.ndarray erstellen) -

img = np.full((100,80,3), 12)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

Kann jemand erklären, was der Grund für diesen Fehler ist und wie er behoben werden kann?

4
Shalabh Singh

Dies liegt daran, dass Ihr Numpy-Array nicht aus dem richtigen Datentyp besteht. Standardmäßig wird ein Array vom Typ np.int64 (64 Bit) erstellt. Für cv2.cvtColor() sind jedoch 8 Bit (np.uint8) Oder 16 Bit (np.uint16) Erforderlich. Um dies zu korrigieren, ändern Sie Ihre Funktion np.full() so, dass sie den Datentyp enthält:

img = np.full((100,80,3), 12, np.uint8)

14
D.Griffiths

Ich bin das OP und wieder einmal beantworte ich meine eigene Frage-

Der Fehler ist aufgetreten, weil der von cv2.imread zurückgegebene Datentyp des numpy-Arrays uint8 ist. Dieser unterscheidet sich vom Datentyp des von np.full() zurückgegebenen numpy-Arrays. Um den Datentyp als uint8 zu definieren, fügen Sie den Parameter dtype hinzu.

img = np.full((100,80,3), 12, dtype = np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
2
Shalabh Singh

Es ist möglicherweise einfacher, ein neues numpy-Array mit dem Ausgangsbild als Quelle und dtype=np.uint8 zu initialisieren:

img = cv2.imread('path//to//image//file')
import numpy as np
img = np.array(img, dtype=np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
1
A.Ametov