代码补全在OpenCV和Python中无法正常工作。

15

我正在使用Ubuntu 14.04操作系统,按照Adrian Rosebrock的指南安装了OpenCV。同时我也在使用PyCharm编写Python和OpenCV程序。

我的问题是:虽然对于cv2模块可以使用代码自动完成,但对于从cv2初始化的实例却无法使用。下面是一个示例:

这个有效:

This one works.

而这个则不行:

But this one wouldn't.

当我按照预期编写程序时,没有任何运行时错误。例如cap.isOpened()可以正常工作,没有出现错误。


提供的链接是指向该指南的。 - Justin Case
4个回答

13

虽然我是Windows用户,但我也遇到了与你类似的问题。在我的情况下,我可以通过以下方式解决这个问题:

from cv2 import cv2

由于我对Python的导入模块的知识不足,无法清楚地向您解释为什么这个方法能够解决问题,但无论如何它确实有效。

祝你好运。


导入错误: 生成绑定时出现错误。子模块名称应始终以父模块名称开头。父名称: cv2.cv2。子模块名称: cv2 - huang
1
虽然这不是直接解决您问题的方法,但这种方法也有助于解决问题。 - kimDragonHyeon

8
开放CV Python模块是底层C++库的动态生成包装器。PyCharm依赖于Python源代码的可用性来提供自动完成功能。当源代码缺失时(如在OpenCV的情况下),PyCharm将生成带有函数原型的骨架文件,并依靠这些文件进行自动完成,但功能会减弱。
因此,当您进行自动完成时,
cv2.

它可以找出模块cv2具有以下成员并提供建议。
另一方面,当你...
cap = cv2.VideoCapture(file_name)

PyCharm可以确定您刚刚调用了cv2模块中的一个方法并将其分配给cap,但它没有关于此方法结果类型的信息,并且不知道要去哪里查找建议。
cap.

如果您在Shell模式下尝试相同的操作,您将看到您实际期望看到的行为,因为在Shell模式下实际上会检查活动对象(它会询问创建的cap对象有哪些成员,并提供这些作为建议)。
你也可以自己编写 opencv 模块的存根文件,以便在编辑模式下启用正确的自动完成。
点击这里查看。

看起来,在PyCharm的Python控制台中,自动完成功能正在按照您所提到的方式正常工作。然而,这并不能解决我在编辑器中尝试使用自动完成时遇到的问题。有没有一种方法可以在编辑器中强制执行内省? - Justin Case
@Justin,我不同意这个回答解决了你的问题。它既解释了你看到的行为,又提供了一种获得你想要的行为的方法(编写opencv模块的存根)。由于这是一个相当复杂的工作,你不应该期望我来提供它。至于编辑器中的内省,那将是困难和危险的,因为你在编辑器中编写的任何内容都必须首先在Python解释器中进行评估。 - Giannis Spiliopoulos

1
如果还有人遇到这个问题,将opencv降级到4.5.5.62可以解决该问题。

我在使用opencv-python 4.6.0.66、MiniConda、Ubuntu 20.04和PyCharm 2022.2.3时遇到了这个问题。受到建议的启发,我将其降级为4.5.3.56,在PyCharm中所有存根都能正常工作。 - cmpltrtok

0

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

这是我的解决方案:

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

enter image description here

enter image description here


6
感觉这就像一把大锤子。找出导致问题的设置而不是删除所有设置会更好。 - Code-Apprentice
这个截图甚至没有展示出任何比原帖中更好的改进。 - Mattwmaster58

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接