web-dev-qa-db-fra.com

Erreur OpenCV - cv2.cvtcolor

Je suis un débutant à openCV et je suis coincé à cette erreur sans résolution. J'essaye de convertir une image de BGR au format en niveaux de gris en utilisant ce code-

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

Cela semble bien fonctionner. J'ai vérifié le type de données de la variable img qui s'avère être numpy ndarray et dont la forme est (100,80,3). Cependant, si je donne une image déjà présente dans le code de type numpy ndarray et de dimensions identiques à celles de la fonction cvtColor, cela me donne l'erreur

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

Le code pour le second cas est (en créant un np.ndarray personnalisé ici) -

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

Quelqu'un peut-il préciser quelle est la raison de cette erreur et comment la corriger?

4
Shalabh Singh

Je suis le PO et, encore une fois, je réponds à ma propre question.

L'erreur s'est produite car le type de données du tableau numpy renvoyé par cv2.imread est uint8, ce qui est différent du type de données du tableau numpy renvoyé par np.full(). Pour que le type de données soit uint8, ajoutez le paramètre dtype-

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

Il peut être plus facile d’initialiser un nouveau tableau numpy avec l’image initiale comme source et dtype=np.uint8:

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