【问题标题】:Code completion is not working for OpenCV and Python代码完成不适用于 OpenCV 和 Python
【发布时间】:2017-08-22 22:25:48
【问题描述】:

我使用的是 Ubuntu 14.04。我已经使用 Adrian Rosebrock 的指南安装了 OpenCV。我也在使用 PyCharm 来编写 python 和 opencv。

我的问题是我可以对 cv2 模块使用代码完成,但代码完成对从 cv2 启动的实例不起作用。下面是一个例子。

This one works.

But this one wouldn't.

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

【问题讨论】:

  • guide 提到的链接。

标签: python opencv intellisense code-completion


【解决方案1】:

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

from cv2 import cv2

由于我不了解 python 导入模块是如何导入的,所以我无法清楚地解释为什么这可以解决问题,但它仍然有效。

祝你好运。

【讨论】:

    【解决方案2】:

    openCV python 模块是底层 c++ 库的dynamically generated wrapper。 PyCharm 依赖于 python 源代码的可用性来提供自动完成功能。当缺少源代码时(如在 opencv 的情况下),pycharm 将生成带有函数原型的骨架文件,并依赖这些骨架文件进行自动补全,但功能会减弱。

    因此,当您在

    处自动完成时
    cv2.
    

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

    另一方面,当你

    cap = cv2.VideoCapture(file_name)
    

    PyCharm 可以发现您刚刚从 cv2 模块调用了一个方法并将其分配给 cap,但没有关于此方法结果类型的信息,也不知道去哪里寻找建议

    cap.
    

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


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

    看看here

    【讨论】:

    • 正如您所提到的,在 PyCharm 的 python 控制台中,自动完成功能按预期工作。但是,当我尝试在编辑器中使用自动完成功能时,这并不能解决我的问题。有没有办法在编辑器中也强制自省?
    • @Justin,我不同意这回答了你的问题。它既解释了你看到的行为,又提供了一种获得你想要的行为的方法(为 opencv 模块编写存根)。由于这是一项不平凡的工作,你不应该指望我提供它。至于在编辑器中进行自省是困难和危险的,因为您在编辑器中编写的任何内容都必须首先在 python 解释器中进行评估。
    【解决方案3】:

    我在 Windows 10 上使用 PyCharm,在 cv2 的智能感知上遇到了类似的问题。

    这是我的解决方案:

    1. Pycharm>文件>管理IDE设置>恢复默认设置
    2. 重启 Pycharm IDE
    3. 重新配置 Python 解释器

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      相关资源
      最近更新 更多