Добавление модулей из opencv_contrib в OpenCV
Я пытаюсь добавить модуль xfeatures2d
из opencv_contrib
в существующий проект OpenCV/Python.
Я загрузил последнюю версию модуля из репо и снова создал OpenCV со следующими дополнительными параметрами:
OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib-master/modules
BUILD_opencv_xfeatures2d=ON
Выдержка из журнала построения:
-- Installing: /usr/local/lib/python2.7/site-packages/cv2.so
-- Installing: /usr/local/lib/python3.4/site-packages/cv2.so
-- Installing: /usr/local/lib/libopencv_xfeatures2d.3.0.0.dylib
Кажется, что новый модуль установлен правильно. Я могу импортировать cv2
в обеих версиях Python. Однако не распознавать новые функции, которые должен добавить модуль.
>>> cv2.SURF()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'SURF'
>>> cv2.xfeatures2d.SURF()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'xfeatures2d'
Ответы
Ответ 1
Я столкнулся с этой же проблемой. Я использую python 2.7.6 и OpenCv 3.0 с дополнительными несвободными модулями. У меня есть xfeatures2d присутствует в доступных модулях и может импортировать его, однако это было так, как если бы xfeatures2d не содержал SIFT или SURF. Независимо от того, как я их назвал, это была та же ошибка:
"Объект AttributeError: 'module' не имеет атрибута 'SIFT'
Я попробовал различные пространства имен, предложенные, и только недавно заметил эту деталь, и ПОЛУЧИЛ РАБОТУ!
$python
→ > импорт cv2
<Р → → помощь (cv2.xfeatures2d)
Вы заметите, что он отвечает, что он теперь называется...
ФУНКЦИИ
SIFT_create(...)
и
SURF_create(...)
Так просто: пространство имен НЕ "cv2.SIFT()" или "cv2.xfeatures2d.SIFT", а скорее
cv2.xfeatures2d.SIFT_create()
Пожалуйста, сделайте снимок!
Ответ 2
Еще одна возможность (и самая простая, которую я нашел!) - установить версию 2.4.9, которая уже включает алгоритм SIFT и SURF.
Вам просто нужно сделать
import cv2
sift = cv2.SIFT()
(...)
Ответ 3
Установите его из pip
Python 2.x
pip install opencv-contrib-python
Python 3.x
pip3 install opencv-contrib-python
Используйте sudo, если произошла ошибка permsision.
Ответ 4
вам не хватает нового, дополнительного пространства имен:
>>> help(cv2.xfeatures2d)
Help on module cv2.xfeatures2d in cv2:
NAME
cv2.xfeatures2d
FILE
(built-in)
FUNCTIONS
SIFT(...)
SIFT([, nfeatures[, nOctaveLayers[, contrastThreshold[, edgeThreshold[,
sigma]]]]]) -> <xfeatures2d_SIFT object>
SURF(...)
SURF([hessianThreshold[, nOctaves[, nOctaveLayers[, extended[, upright]]
]]]) -> <xfeatures2d_SURF object>
StarDetector(...)
StarDetector([, _maxSize[, _responseThreshold[, _lineThresholdProjected[
, _lineThresholdBinarized[, _suppressNonmaxSize]]]]]) -> <xfeatures2d_StarDetect
or object>
DATA
FREAK_NB_ORIENPAIRS = 45
FREAK_NB_PAIRS = 512
FREAK_NB_SCALES = 64
>>> surf = cv2.xfeatures2d.SURF(300)