2017-03-29 3 views
8

J'utilise Ubuntu 14.04. J'ai installé OpenCV en utilisant le guide d'Adrian Rosebrock. J'utilise aussi PyCharm pour programmer python et opencv. Mon problème est que je peux utiliser l'achèvement de code pour les modules cv2, mais l'achèvement du code ne fonctionnera pas pour les instances initiées à partir de cv2. Un exemple est montré ci-dessous.L'achèvement du code ne fonctionne pas pour OpenCV et Python

This one works.

But this one wouldn't.

Il n'y a pas d'erreur de temps d'exécution quand j'écris mon programme comme prévu. De telle sorte que cap.isOpened() fonctionne sans erreur.

+0

le lien le [Guide] (http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7 -on-ubuntu /) mentionné. –

Répondre

4

Le module openCV python est un dynamically generated wrapper de la bibliothèque C++ sous-jacente. PyCharm s'appuie sur la disponibilité du code source python pour fournir des fonctionnalités de saisie semi-automatique. Lorsque le code source est manquant (comme dans le cas opencv), pycharm va générer des fichiers squelette avec des prototypes de fonctions et s'appuyer sur ceux pour l'auto-complétion mais avec des capacités réduites.

En conséquence lorsque vous à saisie semi-automatique

cv2. 

il peut comprendre que le module a CV2 les membres suivants et des suggestions.

D'autre part lorsque vous

cap = cv2.VideoCapture(file_name) 

PyCharm peut comprendre que vous venez appelé une méthode à partir du module CV2 et attribué à cap mais n'a pas d'informations sur le type du résultat de cette méthode et ne sait pas où aller chercher des suggestions pour

cap. 

Si vous essayez les mêmes choses en mode shell, vous verrez le comportement que vous avez réellement devrait voir, car en mode shell va réellement introspect objets vivants (il demandera l'objet de cap créé ce que les membres qu'il a et fournir aux suggestions)


Vous pouvez également écrire des talons pour vous-même le module OpenCV pour permettre autocomplétion correcte en mode édition.

Jetez un oeil here

+0

Comme il apparaît, dans la console python de PyCharm auto-complète fonctionne comme prévu, comme vous l'avez mentionné. Cependant, cela ne résout pas mon problème lorsque j'essaie d'utiliser la saisie semi-automatique dans l'éditeur. Existe-t-il un moyen d'imposer l'introspection également dans l'éditeur? –

+0

@Justin, je ne suis pas d'accord que cela répond à votre question. Cela à la fois, explique le comportement que vous voyez et fournit un moyen d'obtenir le comportement que vous voulez (écrire des stubs pour le module opencv). Comme c'est une quantité de travail non triviale, vous ne devriez pas m'attendre à ce que je le fournisse. Quant à l'introspection dans l'éditeur, cela serait difficile et dangereux puisque tout ce que vous avez écrit dans l'éditeur devrait d'abord être évalué dans un interpréteur python. –