Edit: le titre original "convertir le tableau numpy en cvmat" était une erreur - le message d'erreur d'OpenCV n'était pas utile et je ne lis pas les documents!
Avec OpenCV 2, IPython utilise désormais les tableaux NumPy par défaut.
cvimage = cv2.imread("image.png") #using OpenCV 2
type(cvimage)
Out: numpy.ndarray #dtype is uint8
pltimage = plt.imread("image.png") #using Matplotlib
type(pltimage)
Out: numpy.ndarray #dtype is float
plt.imshow(cvimage) # works great
cv2.imshow(cvimage)
TypeError: Required argument 'mat' (pos 2) not found
Puisque cv2
utilise les tableaux NumPy par défaut, il n'y a plus de constructeur cv :: Mat et NumPy n'a aucune fonction à convertir en cv::Mat
tableau.
Des idées?
La fonction a la docstring suivante: imshow(winname, mat) -> None
. Vous pouvez voir la chaîne doc en tapant cv2.imshow.__doc__
Dans l'interpréteur.
Essayez cv2.imshow('Image', cvimage)
.
tl; dr: Dans la question d'origine, le premier argument de "nom de fenêtre" était manquant. "imshow" prend deux paramètres et un seul a été fourni.
La question demande techniquement comment convertir un tableau NumPy (analogue au tableau CV2) en un objet Mat (CV). Pour toute personne intéressée, cela peut être fait par:
mat_array = cv.fromarray(numpy_array)
où mat_array est un objet Mat et numpy_array est un tableau ou une image NumPy. Je suggérerais de rester loin des structures CV plus anciennes dans la mesure du possible. Les tableaux Numpy offrent des performances bien meilleures que les implémentations en Python natif
Mat
objet était nécessaire car C/C++ manquait d'une implémentation standard/native des matrices.
Cependant, le numpy
de array
est un remplacement parfait pour cette fonctionnalité. D'où le cv2
le module accepte numpy.array
s partout où une matrice est indiquée dans les documents.