2016-02-11 1 views
0

Так что мой случай сложный.Проблемы с связыванием Python cv2 при понижении OpenCV от 3.0.0 до 2.4.11

Сначала я установил OpenCV2.4.8 и начал использовать его для python2.7. Позже я планировал перейти на OpenCV3.0.0. Оба раза во время установки я следил за процедурой официальной документации. Все работало нормально, пока я не понял, что OpenCV3 не имеет модулей SIFT() и SURF(). После небольшого поиска я обнаружил, что они присутствуют в opencv_contrib. Сначала я попытался установить это, но по какой-то причине я не смог.

Позже я обнаружил, что эти модули присутствуют в OpenCV2.4.11 и планируют установить его. Снова после официальной процедуры я установил OpenCV2.4.11 получил то же самое SIFT() importerror. После проверки OpenCV __version__ в python2 и Python3 я нашел следующий

  • python2: "2.4.8"
  • python3: "3.0.0"

Для проверки версии я использовал следующее код:

from cv2 import __version__ 
print(__version__) 

к сожалению, у меня нет много памяти в /home, поэтому я удалил OpenCV2.4.8 и OpenCV3.0.0 создавать папки после установки. Поэтому я попытался вручную удалить OpenCV2.4.8 и OpenCV3.0.0 и удалить все opencv из libs из /usr/local/libs/ и подкаталогов, а также все opencv-буферы из /usr/local/bins/ (следующий ответ в этом question).

После удаления всех файлов opencv я снова заново установил OpenCV2.4.11 и попытался запустить мой код. Он потерпел неудачу на этапе импорта в python2 давая

>>> import cv2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory 

в Python3

>>> import cv2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: libopencv_core.so.3.0: cannot open shared object file: No such file or directory 

Я снова проверил, если OpenCV2.4.11 присутствует или нет, и его там, но питон не обновил ранее сохраненную ссылку к opencv lib. Я застрял в этой ошибке с 2 дней без решения. Любая помощь будет оценена.

EDIT: : Есть ли файл поиска общей библиотеки, который использует python для хранения всех мест размещения разделяемых библиотек? Если не так, как это работает (как питон узнает, где искать OpenCV, как OpenCV не указан в pip freeze)

EDIT2: я нашел еще одну ошибку. Раньше я не включил -D BUILD_SHARED_LIBS=ON. На этот раз я сохранил его ON и rand sudo ldconfig после make и make install. Теперь у меня есть libopencv_core.so.2.4 в моем /usr/local/lib/. Это символическая ссылка на libopencv_core.so.2.4.11, присутствующую в той же папке. После ldconfig, когда я проверил python2 import cv2 не обнаружил никакой ошибки, но __version__ все еще показывает '2.4.8'. Я дважды проверял любой файл OpenCV2.4.8 .so и их нет. Как это все еще указывается на версию '2.4.8'?

ответ

1

Действия по удалению:

  1. удалить OpenCV ЛИЭС по: sudo apt-get purge libopencv*
  2. Убедитесь, что ли CV2 удаляется, пытаясь import cv2 в питона. Он не должен иметь CV2 модуль настоящего
  3. Установите opencv2.4.11 следуя this sh file
  4. Run sudo ldconfigsudo make install после
  5. Вещи должны обычно работать, но это не работает в моем случае, потому что cv2.so не хватало /usr/local/lib/python2.7/dist-packages/. Для этого вручную скопируйте с /<opencv-2.4.11 unzip locaiton>/release/lib/cv2.so в /usr/local/lib/python2.7/dist-packages/. Используйте разрешения sudo.

Теперь import cv2 будет работать, а __version__ - '2.4.11'.