web-dev-qa-db-fra.com

Arguments de cv2 :: imshow

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?

13
Martin Beckett

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.

19
zarthur

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

15
Steve

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.arrays partout où une matrice est indiquée dans les documents.

3
musically_ut