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écesseurctypes-opencv
.
Quelles sont les principales différences et laquelle dois-je utiliser?
Réponses:
Officiellement, OpenCV publie deux types d'interfaces Python, cv
et cv2
.
CV:
J'ai commencé à travailler dessus cv
. En cela, tous les types de données OpenCV sont conservés en tant que tels. Par exemple, une fois chargées, les images sont de format cvMat
identique à celui du C ++.
Pour les opérations de tableau, il y a plusieurs fonctions comme cvSet2D
, cvGet2D
, etc. Et des discussions disent, ils sont plus lents.
Pour imageROI, vous avez besoin de fonctions spéciales telles que cvSetImageROI
.
Si vous trouvez des contours, des cvSeq
structures sont renvoyées, ce qui n'est pas si agréable à travailler que les listes Python ou les tableaux NumPy.
(Et je pense que bientôt son développement sera arrêté. Auparavant, il n'y en avait que cv
. Plus tard, OpenCV est venu avec les deux cv
et cv2
. Maintenant, dans les dernières versions, il n'y a que le cv2
module, et il cv
y a une sous-classe à l'intérieur cv2
. Vous devez appeler import cv2.cv as cv
pour y accéder.)
cv2:
Et le dernier est cv2
. En cela, tout est retourné comme des NumPy
objets tels que ndarray
et des native Python
objets comme lists
, tuples
, dictionary
, etc. Donc , en raison de ce soutien NumPy, vous pouvez le faire toute opération numpy ici. NumPy
est une bibliothèque de traitement de tableaux extrêmement stable et rapide.
Par exemple, si vous chargez une image, un ndarray
est renvoyé.
array[i,j]
vous donne la valeur du pixel à la position (i, j).
En outre, pour imageROI, le découpage de tableau peut être utilisé comme 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, faites simplement res = img1+img2
. (Mais l'ajout de 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 renvoyés sont des listes de tableaux Numpy. Vous pouvez trouver une discussion détaillée sur les contours dans Contours - 1: Mise en route .
Bref, avec cv2, tout est simplifié et assez rapide.
Une discussion simple sur l'accélération de NumPy cv2
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 avoir arrêté le développement ultérieur.
Je pense qu'il vaudrait mieux s'en tenir aux bibliothèques officielles.
Bref, je vous recommande d'utiliser cv2!
EDIT: Vous pouvez voir la procédure d'installation du cv2
module dans Installer OpenCV dans Windows pour Python .