Мне удалось восстановить вашу ошибку, и я смог это исправить. Внимательно посмотрите на формулу Python для Homebrew, используемую при установке OpenCV: https://formulae.brew.sh/formula/opencv. На момент написания этой статьи он использовал python@3.8
, что означает, что он использует Python 3.8 Homebrew вместо значения по умолчанию Python 3.7.7 (на момент написания этой статьи), которое будет находиться в /usr/local/bin/python3
, если Вы использовали Homebrew для установки стандартной формулы для Python. Поскольку вы не смогли найти OpenCV после того, как установили его из Homebrew, вы попытались использовать pip
для его установки. В формуле opencv-contrib-python
не включены несвободные модули, а формула, которую вы использовали выше, чтобы попытаться получить несвободные модули, устарела.
Поэтому, когда вы используете Homebrew для установки OpenCV, вы Вы получаете вышеуказанную ошибку, потому что, даже если вы установили OpenCV с пакетами contrib и с оболочками Python через Homebrew, вы используете pip
, предоставленный вашей системой, для установки OpenCV, но вы не используете то, что Homebrew установил для вас. В частности, вы не используете актуальную версию Python, установленную для использования с OpenCV.
В моей системе эту версию Python 3.8 можно найти здесь:
/usr/local/Cellar/python@3.8/3.8.2/bin
Я также должен был убедиться, что numpy
был установлен до импорта OpenCV. Перейдите к указанному выше каталогу, затем выполните pip
локально в этом каталоге:
$ cd /usr/local/Cellar/python@3.8/3.8.2/bin
$ ./pip install numpy
Как только вы закончите, запустите эту локальную версию python3
, затем попробуйте импортировать OpenCV и модуль SIFT:
$ ./python3
Python 3.8.2 (default, Mar 11 2020, 00:29:50)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 0x10b045550>
>>>
Двигаясь вперед, вам придется использовать Python 3.8 от Homebrew, чтобы использовать несвободные модули для OpenCV, если вы решите использовать это из Homebrew. Если вы хотите go дальше и сделать так, чтобы ваша система использовала эту версию Python, а не Python 3.7, найденную в /usr/local/bin/python3
, вам придется обновить файл .bashrc
, расположенный у вас дома. каталога, так что вместо этой версии используется эта версия Python:
export PATH="/usr/local/Cellar/python@3.8/3.8.2/bin:$PATH"
Если вы предпочитаете использовать формулу pip
для opencv-contrib-python
и придерживаться версии Python в /usr/local/bin/python3
, несвободные модули не сопровождаются этим, поэтому вам придется клонировать репо для этой работы и перестроить оболочку с этими включенными (источник: https://github.com/skvark/opencv-python/issues/126#issuecomment -596689259 ).
Небольшое замечание, что мне пришлось вручную указать, где на моем компьютере была установлена Qt. При первоначальной настройке OpenCV не удалось найти Qt в моем пути к командной строке. Я сделал brew install qt
первым. Вам нужно будет указать путь к этому в переменной окружения CMAKE_PREFIX_PATH
. Наконец, при условии, что вы клонируете репо в каталог Downloads
:
brew install qt
cd ~/Downloads
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON -DENABLE_CONTRIB=1 -DOPENCV_EXTRA_MODULES_PATH=/Users/<User>/Downloads/opencv-python/opencv_contrib/modules/ -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/5.14.2/"
python3 setup.py build
python3 setup.py install
5.14.2
выше - это версия Qt, которую я имею на моем компьютере. Обязательно измените его на любую версию, установленную на вашем компьютере. Также замените <User>
именем пользователя вашей машины, под которым вы вошли. Вы можете найти это, выполнив cd ~
в Терминале, и посмотреть, какая последняя строка после разделителя каталогов, выполнив pwd
.
Поскольку срок действия патента SIFT истек, надеюсь, что это будет удалено из несвободного пакета и будет частью основной библиотеки OpenCV!