Проблемы с связыванием 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 я обнаружил следующее

  • питон2: "2.4.8"
  • питон3: "3.0.0"

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

from cv2 import __version__
print(__version__)

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

После удаления всех файлов 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

в питоне3

>>> 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 или нет, и он там, но python не обновил ранее сохраненную ссылку на opencv lib. Я застрял в этой ошибке с 2 дней без решения. Любая помощь будет оценена.

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

EDIT2: я нашел еще одну ошибку. Я не включал -D BUILD_SHARED_LIBS=ON раньше. На этот раз я сохранил ON и ранд 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'?


person Ashutosh Baheti    schedule 11.02.2016    source источник


Ответы (1)


Шаги по удалению:

  1. удалить библиотеки opencv: sudo apt-get purge libopencv*
  2. Убедитесь, что cv2 удален, попробовав import cv2 в python. Он должен показывать отсутствие модуля cv2
  3. Установите opencv2.4.11, следуя этому файлу sh
  4. Выполнить sudo ldconfig после sudo 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'.

person Ashutosh Baheti    schedule 11.02.2016