代码完成不适用于OpenCV和Python

Jus*_*ase 9 python intellisense opencv code-completion

我正在使用Ubuntu 14.04.我使用Adrian Rosebrock的指南安装了OpenCV.我也在使用PyCharm来编写python和opencv.

我的问题是我可以使用cv2模块的代码完成,但代码完成不适用于从cv2启动的实例.一个例子如下所示.

这个工作.

但是这个不会.

按预期编写程序时没有运行时错误.这样cap.isOpened()可以正常工作而不会出错.

kim*_*eon 13

虽然我是Windows用户,但我也遇到过和你类似的问题。就我而言,我可以通过以下方式导入来解决这个问题:

from cv2 import cv2
Run Code Online (Sandbox Code Playgroud)

由于我缺乏对 python 导入模块如何工作的了解,我无法清楚地向你解释为什么这可以解决问题,但无论如何它都是有效的。

祝你好运。


Gia*_*los 6

openCV python模块是底层c ++库的动态生成包装器.PyCharm依赖于python源代码的可用性来提供自动完成功能.当缺少源代码时(如在opencv情况下),pycharm将生成具有函数原型的框架文件,并依赖于自动完成但具有能力下降的框架文件.

因此,当您自动完成时

cv2.
Run Code Online (Sandbox Code Playgroud)

它可以判断模块cv2具有以下成员并提供建议.

另一方面当你

cap = cv2.VideoCapture(file_name)
Run Code Online (Sandbox Code Playgroud)

PyCharm可以搞清楚你刚刚从cv2模块调用了一个方法并将其分配给了cap但是没有关于这个方法的结果类型的信息,并且不知道去哪里寻找建议

cap.
Run Code Online (Sandbox Code Playgroud)

如果你在shell模式下尝试相同的东西,你会看到你实际期望看到的行为,因为在shell模式下实际上会内省活动对象(它将询问创建的cap对象它拥有哪些成员并提供这些作为建议)


您也可以自己编写opencv模块的存根,以便在编辑模式下启用正确的自动完成功能.

看看这里