Il y a
-
opencv
(la bibliothèque des gars d'OpenCV), -
cv
(l'ancienne bibliothèque des gars d'OpenCV) et -
pyopencv
avec son prédécesseurctypes-opencv
.
Quelles sont les principales différences et laquelle dois-je utiliser ?
Il y a
opencv
(la bibliothèque des gars d'OpenCV),cv
(l'ancienne bibliothèque des gars d'OpenCV) etpyopencv
avec son prédécesseur ctypes-opencv
.Quelles sont les principales différences et laquelle dois-je utiliser ?
Officiellement, OpenCV propose deux types d'interfaces Python, cv
y cv2
.
cv :
J'ai commencé à travailler sur cv
. Dans ce cas, tous les types de données OpenCV sont conservés tels quels. Par exemple, lors du chargement, les images sont au format cvMat
comme dans le cas du C++.
Pour les opérations sur les tableaux, il existe plusieurs fonctions comme cvSet2D
, cvGet2D
etc. Et certaines discussions disent qu'ils sont plus lents.
Pour imageROI, vous avez besoin de fonctions spéciales telles que cvSetImageROI
.
Si vous trouvez des contours, cvSeq
sont retournées, ce qui n'est pas très pratique pour travailler avec des listes Python ou des tableaux NumPy.
(Et je pense que, bientôt, son développement sera arrêté. Auparavant, il n'y avait que cv
. Plus tard, OpenCV est arrivé avec les deux cv
y cv2
. Maintenant, dans les dernières versions, il y a seulement le cv2
module, et cv
est une sous-classe de cv2
. Vous devez appeler import cv2.cv as cv
pour y accéder).
cv2 :
Et le dernier en date est cv2
. Dans ce cas, tout est renvoyé comme NumPy
des objets comme ndarray
et native Python
des objets comme lists
, tuples
, dictionary
etc. Ainsi, grâce à ce support NumPy, vous pouvez effectuer n'importe quelle opération numpy ici. NumPy
est une bibliothèque de traitement de tableaux très stable et rapide.
Par exemple, si vous chargez une image, un fichier de type ndarray
est renvoyé.
array[i,j]
vous donne la valeur du pixel à la position (i,j).
De même, pour imageROI, le découpage en tableaux peut être utilisé comme suit ROI=array[c1:c2,r1:r2]
. Pas besoin de fonctions séparées.
Pour ajouter deux images, il n'est pas nécessaire d'appeler une fonction, il suffit de faire res = img1+img2
. (Mais l'addition NumPy est une opération modulo pour les tableaux uint8 comme les images. Voir l'article Différence entre l'arithmétique matricielle dans OpenCV et Numpy pour en savoir plus.
Les contours retournés sont des listes de tableaux Numpy. Vous pouvez trouver une discussion détaillée sur les contours dans Contours - 1 : Mise en route .
En bref, avec cv2 tout est simplifié et assez rapide.
Une discussion simple sur l'accélération de NumPy cv2
est dans la question Stack Overflow Comparaison des performances des interfaces OpenCV-Python, cv et cv2 .
pyopencv :
Je ne sais pas grand-chose à ce sujet puisque je ne l'ai pas utilisé. Mais il semble que son développement ait été arrêté.
Je pense qu'il serait préférable de s'en tenir aux bibliothèques officielles.
En bref, je vous recommande d'utiliser cv2 !
EDIT : Vous pouvez voir la procédure d'installation de l'application cv2
module en Installer OpenCV sous Windows pour Python .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.