Почему Пилинт говорит мне, что «модуль cv2 не имеет члена»? - PullRequest
0 голосов
/ 05 октября 2018

Я получаю сообщения об ошибках 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")

Кто-нибудь знает, что происходит?

Ответы [ 4 ]

0 голосов
/ 04 марта 2019

Если вы не хотите добавлять больше настроек, добавьте этот код в ваш файл конфигурации вместо «белого списка».

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

соответствующий вопрос: how-do-i-получить-pylint к распознайте-NumPy-член

0 голосов
/ 05 октября 2018

Не обращая внимания на проблему с ворсом, если ваша цель состоит в том, чтобы определить, являются ли два изображения одинаковой формы поразрядно-одинаковыми, то это будет выглядеть как

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

более ясное заявление о намерениях.

Вычитать один массив uint8 из другого проблематично.

Добавление: только что проверил setup.cfg, который я использую, и вижу, что яисключаю cv2 вместе с остальными моими зависимостями через

[flake8]
exclude=.git,venv
0 голосов
/ 20 ноября 2018

У вас есть 2 отдельные проблемы:

  • pylint не находит членов cv2.SOMETHING
  • изображения не загружены

Это НЕ проблема с вашимУстановка cv2, как это, очевидно, обнаруживает Python (в противном случае вы получите ошибку времени выполнения)

Чтобы исправить проблему с lint: известно, что 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') и распечатав его (бессмысленно как двоичный) содержимое, просто чтобы увидеть, найден ли файл.

0 голосов
/ 05 октября 2018

Если вы перемещаетесь по пакету, вы найдете этот каталог

yourpythondir\Lib\site-packages\cv2

, каталог cv2 не существует, поэтому у него нет __init__.py.Linting должно работать в консоли Python после импорта пакета, но, вероятно, не в текстовом редакторе

...