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?
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)
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)