web-dev-qa-db-fra.com

Quelle est la différence entre toutes ces interfaces OpenCV Python?

Il y a

Quelles sont les principales différences et laquelle devrais-je utiliser?

83
Framester

Officiellement, OpenCV publie deux types d’interfaces Python, cv et cv2.

cv:

J'ai commencé à travailler sur cv. En cela, tous les types de données OpenCV sont préservés en tant que tels. Par exemple, lorsqu'elles sont chargées, les images sont au format cvMat, comme en C++.

Pour les opérations sur les tableaux, il existe plusieurs fonctions telles que cvSet2D, cvGet2D, etc. Et certaines discussions disent, ils sont plus lents.

Pour imageROI, vous avez besoin de fonctions spéciales telles que cvSetImageROI.

Si vous trouvez des contours, les structures cvSeq sont renvoyées, ce qui n'est pas très pratique, comparé aux listes ou aux tableaux Python ou NumPy.

(Et je pense que, bientôt, son développement sera arrêté. Plus tôt, il n'y avait que cv. Plus tard, OpenCV est arrivé avec cv et cv2. Maintenant, dans les dernières versions, il n’ya que le cv2 module et cv est une sous-classe à l'intérieur de cv2. Vous devez appeler import cv2.cv as cv pour y accéder.)

cv2:

Et le dernier est cv2. En cela, tout est retourné sous forme d'objets NumPy comme ndarray et native Python objets comme lists, tuples, dictionary, etc. Ainsi, grâce à cette prise en charge de NumPy, vous pouvez effectuer n'importe quelle opération numpy ici. NumPy est une bibliothèque de traitement de tableaux hautement stable et rapide.

Par exemple, si vous chargez une image, un ndarray est renvoyé.

array[i,j] vous donne la valeur du pixel en position (i, j).

De plus, pour imageROI, le découpage en matrice 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, il suffit de faire res = img1+img2. (Mais l'ajout de NumPy est une opération modulo pour les tableaux uint8, comme des 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 trouverez 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 la façon dont NumPy accélère cv2 est dans la question de débordement de pile 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é tout développement ultérieur.

Je pense qu'il serait préférable de s'en tenir aux bibliothèques officielles.

En bref, je vous recommanderais d'utiliser cv2 !

EDIT: Vous pouvez voir la procédure d'installation pour le cv2 module in Installer OpenCV sous Windows pour Python.

133
Abid Rahman K