为什么Pylint告诉我“模块cv2没有成员”?

时间:2018-10-05 15:14:18

标签: python opencv pylint cv2

我不断收到pylint错误,说:

  

模块'cv2'没有“某物”成员

我的cv2模块不起作用。

我不知道为什么。据我所知我安装正确。我什至卸载并重新安装了约20次。

当我打印出我在python lib cv2中拥有的模块时;其功能已正确打印。我使用的是python 3.6.6,没有安装其他版本的python。

例如,此代码将打印:“图像相同” 不管我提供什么图像,因为2张图像将始终等于“无”。

import cv2
import numpy as np

image1 = cv2.imread("1.jpg")
image2 = cv2.imread("2.jpg")

difference = cv2.subtract(image1, image2)

result = not np.any(difference) #if difference is all zeros it will return False

if result is True:
    print ("The images are the same")
else:
    cv2.imwrite("result.jpg", difference)
    print ("the images are different")

有人知道怎么回事吗?

7 个答案:

答案 0 :(得分:0)

如果您浏览软件包,则会找到该目录

yourpythondir\Lib\site-packages\cv2

cv2目录不存在,因此没有__init__.py。导入包后,Linting应该可以在python控制台中工作,但可能无法在文本编辑器中工作

答案 1 :(得分:0)

忽略绒毛问题,如果您的目标是判断两个形状相同的图像 是否按位相同,则将其措辞为

images_differ = np.any(im1 != im2)
if images_differ:
    ...

在我看来是更清晰的意图陈述。

从另一个数组中减去一个uint8数组是有问题的。

添加:刚刚检查了我正在使用的setup.cfg,并发现我通过

将cv2及其其余的依赖项排除在外
[flake8]
exclude=.git,venv

答案 2 :(得分:0)

您有2个独立的问题:

  • pylint找不到cv2.SOMETHING成员
  • 未加载图片

您的cv2安装没有问题,因为显然Python确实找到了它(否则您会遇到运行时错误)

要修复皮棉问题:已知pylint由于以下原因无法解析cv2:https://github.com/PyCQA/pylint/issues/2426
您需要将--extension-pkg-whitelist=cv2传递给pylint才能使掉毛错误消失。

关于图像加载问题:将其简化为一个最小的示例。例如。在控制台中执行python3 -c "import cv2; print(cv2.imread('1.jpg'))"(或将其放入脚本中并执行)并检查输出。如果输出为None,请尝试绝对路径。

我很确定您的问题是由于图像不在程序作为其工作目录的路径中引起的。您可以通过例如用标准python:open('1.jpg')打开它并打印其内容(无意义的二进制文件)只是为了查看是否找到了文件。

答案 3 :(得分:0)

如果您不想添加更多配置,请将此代码添加到您的配置文件中,而不是“ whitelist”。

{
"python.linting.pylintArgs": ["--generate-members"],
}

有关问题:how-do-i-get-pylint-to-recognize-numpy-member

答案 4 :(得分:0)

在您的.pylintrc文件配置文件中替换

generated-members=

generated-members=cv2

以禁止显示这些警告。

答案 5 :(得分:0)

我有同样的问题。 我的设置是Python 3.6.6 64位AMD 我的IDE是Visual Studio Code 1.46.1

我的研究使我进入https://answers.opencv.org/question/200869/e1101module-cv2-has-no-imread-member/。 上面链接的页面上有一条评论说,要用以下一种格式替换您的导入语句:

from cv2 import cv2

保存您的更改,并允许您的linter重新加载。中提琴!错误消失。

如果有帮助,请标记为答案(我已经问了这个问题已有一段时间了。)

干杯。

答案 6 :(得分:0)

如果你使用 VSCode,你可以尝试更改代码。

从此:

import cv2

为此:

from cv2 import cv2