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

88

Il y a

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

Framester
la source

Réponses:

138

Officiellement, OpenCV publie deux types d'interfaces Python, cvet 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 cvMatidentique à 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 cvSeqstructures 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 cvet cv2. Maintenant, dans les dernières versions, il n'y a que le cv2module, et il cvy a une sous-classe à l'intérieur cv2. Vous devez appeler import cv2.cv as cvpour y accéder.)

cv2:

Et le dernier est cv2. En cela, tout est retourné comme des NumPyobjets tels que ndarray et des native Pythonobjets comme lists, tuples, dictionary, etc. Donc , en raison de ce soutien NumPy, vous pouvez le faire toute opération numpy ici. NumPyest une bibliothèque de traitement de tableaux extrêmement stable et rapide.

Par exemple, si vous chargez une image, un ndarrayest 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 cv2dans 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 cv2module dans Installer OpenCV dans Windows pour Python .

Abid Rahman K
la source
L'interface Python cv2 sera compilée et installée si vous construisez OpenCV à partir des sources. Si vous utilisez des packages binaires pour Linux ou un autre système d'exploitation, vous devriez consulter la documentation de votre système d'exploitation / distribution. Consultez goo.gl/MUjXi pour obtenir de l'aide.
TH.
1
@Framester: voir la procédure d'installation de cv2 dans ce lien: opencvpython.blogspot.in/2012/05/…
Abid Rahman K
La réponse d'Abid est excellente. Juste pour ajouter un autre point: j'ai fait un projet avec Python 3.x et le seul moyen d'accéder à opencv était de passer par ctypes_opencv et l'OpenCV 1.0 original. Il prétend prendre en charge OpenCV pre1.1 mais je ne l'ai jamais fait fonctionner. Avec cela, vous utiliserez le cvSetROI d'origine, etc. Interface de type C.
KobeJohn
Si vous souhaitez l'installer avec pip. lire ici ou faire:pip install opencv-python
Timo