PyCharm中opencv-python包无代码提示的解决办法
今天在开发测试一个视频目标检测项目的时候偶尔发现PyCharm给了自己很多警告提示,如下,仔细一看大部分都是来自于OpenCV的警告,提示找不到函数啥的,自己的环境中明明是装了这些环境的,而且调用CV的摄像头函数啥的也是可以运行的,不知道为啥会突然提示这个,然后自己测试了一下导入cv2,可以导入,但是确没有代码自动补全提示功能,感觉很奇怪?
背景说明
今天在开发测试一个视频目标检测项目的时候偶尔发现PyCharm给了自己很多警告提示,如下,仔细一看大部分都是来自于OpenCV的警告,提示找不到函数啥的,自己的环境中明明是装了这些环境的,而且调用CV的摄像头函数啥的也是可以运行的,不知道为啥会突然提示这个,然后自己测试了一下导入cv2,可以导入,但是确没有代码自动补全提示功能,感觉很奇怪?
问题分析
在PyCharm中使用OpenCV(opencv-python
)时,自动补全功能有时候可能无法正常工作。这通常是由于配置问题或环境设置问题。以下是一些可能的解决方案,可以帮助你解决这个问题:
1.检查Python解释器
确保PyCharm使用的是正确的Python解释器,并且该解释器已经安装了opencv-python
包。
1.打开PyCharm并导航到 File > Settings
(在Mac上是 PyCharm > Preferences
)。
2.在左侧菜单中选择 Project: [YourProjectName] > Python Interpreter
。
3.确保选择了正确的解释器,并且在解释器列表中可以看到opencv-python
。
2.重建索引
有时候,PyCharm的索引可能会出现问题,导致自动补全功能无法正常工作。你可以尝试重建索引:
1.导航到 File > Invalidate Caches / Restart
。
2.在弹出的对话框中选择 Invalidate and Restart
。
3.这将重建PyCharm的索引,可能会解决自动补全的问题。
3.安装完整的OpenCV模块
有时候,使用opencv-python-headless
可能会导致某些功能无法使用。如果你使用的是opencv-python-headless
,可以尝试安装完整版本的opencv-python
:
pip uninstall opencv-python-headless
pip install opencv-python
4.更新PyCharm和插件
确保你正在使用最新版本的PyCharm和相关插件。更新软件可以修复一些已知的bug。
1.导航到 Help > Check for Updates
。
2.也可以在 File > Settings > Plugins
中检查插件是否需要更新。
5.使用虚拟环境
如果你没有使用虚拟环境,建议为项目创建一个虚拟环境。这可以帮助隔离项目的依赖关系,并且通常会解决一些与自动补全相关的问题。
1.创建虚拟环境:
python -m venv venv
2.激活虚拟环境并安装opencv-python
:
source venv/bin/activate # 在Linux和macOS上
venv\Scripts\activate # 在Windows上
pip install opencv-python
3.在PyCharm中配置项目使用这个虚拟环境。
6.检查代码提示设置
确保你的代码提示设置是启用的:
1.导航到 File > Settings > Editor > Code Completion
。
2.检查是否启用了基本代码补全和智能代码补全。
7.使用cv2
的明确导入
有时候,PyCharm可能无法识别某些动态导入的模块。确保在代码中显式导入cv2
模块:
import cv2
解决尝试
自己对照以上原因仔细检查了一下,发现了自己的环境确实有点问题,原因如上面所说的第三条,安装了多个版本的opencv-python。
于是乎自己按照提示,卸载了opencv-python-headless,本以为应该对症下药了,结果卸载之后运行出现如下问题:
这很明显是 opencv-python报错啊,倒是导入cv2确实可以的,于是自己用dir(cv2)查询了一下,发现所有和opencv相关的已经被卸载,只剩下一个主函数了 ,所以导入不报错但是运行报错,于是自己重现安装了一下opencv-python.安装之后发现功能正常,但是依然没有代码自动提示不全的功能。
最终解决
自己经过多次查阅资料,发现将当前使用的环境文件夹中cv2.pyd文件(Ubuntu下为.so文件)复制到其上级目录下即可,自己的环境路径可以通过pip install opencv-python找到,一般在....\site-packages\cv2路径下,复制过后等待pycharm完成解析即可。。
以上是自己的cv2.pyd路径,下面是复制之后的路径,要记住是复制过去,不是移动哦。
看一下效果(完美达到自己预期):
额外方法
网络上大部分提供的是另外一种方法,但是我嫌弃麻烦没有尝试验证,在这里也和大家分享一下:
在site-package中修改cv2的__init__.py文件
找到你的python的site-packages
文件夹,打开opencv的__init__.py文件修改__init__.py文件,你的文件路径在....\Lib\site-packages\cv2\__init__.py
文件,将原来的代码注释掉(删掉也行),更改为:
import sys
import os
import importlib
os.environ["PATH"] += os.pathsep + os.path.dirname(os.path.realpath(__file__))
from .cv2 import *
globals().update(importlib.import_module('cv2.cv2').__dict__)
然后重启PyCharm。
我按照上面的说明打开这个文件发现我的文件内容如下:
因为还涉及到下面还有别的函数啥的,而且是包的主要文件,我一是嫌弃麻烦,而是担心改这些有风险,会影响该库的使用,所以就没有尝试,有兴趣的同学可以验证尝试一下。
opencv-python、headless
和 contrib关系
区别
因为前面在问题分析的时候有提到opencv-python-headless和opencv-python的问题,所以这里我也把自己查阅的这一方面信息补充说明一下。
1.opencv-python
- 用途:这是OpenCV的标准版本,包含了OpenCV的核心功能。
- 包含内容:包括OpenCV主模块和一些基本的附加模块。支持图像处理、视频捕捉、机器学习等功能。
- 依赖:需要完整的GUI库支持(如Qt或GTK),这意味着在某些服务器环境中可能不需要这些依赖。
2.opencv-python-headless
- 用途:适用于不需要GUI功能的环境,特别是在服务器或容器化应用中。
- 包含内容:与
opencv-python
类似,但不包括任何与GUI相关的功能。这意味着它不包含视频显示和图像显示窗口功能。 - 优点:减少了包的大小和不必要的依赖,非常适合在无显示设备的服务器端应用程序中使用。
3.opencv-contrib-python
- 用途:这是OpenCV的扩展版本,包含了OpenCV社区贡献的附加模块。
- 包含内容:除了
opencv-python
中的内容,还包括opencv_contrib
模块中的额外功能。这些模块包括一些更高级的功能和算法,如SIFT、SURF、背景分割、面部标记等。 - 依赖:与
opencv-python
类似,需要完整的GUI库支持。
选择哪个版本?
- GUI应用程序(例如,需要使用
imshow
显示图像):选择opencv-python
或opencv-contrib-python
。 - 无头服务器应用程序(例如,运行在没有显示器的环境中):选择
opencv-python-headless
。 - 需要额外功能或模块(例如,使用SIFT、SURF等):选择
opencv-contrib-python
。
选择哪个版本主要取决于你的使用场景和需求。如果你只需要基本的OpenCV功能并且不需要额外的模块,opencv-python
就足够了。如果需要在不带图形界面的环境中运行,则可以使用opencv-python-headless
。如果你的项目需要OpenCV社区贡献的额外模块,则可以使用opencv-contrib-python
。
更多推荐
所有评论(0)