Так что мой случай сложный.
Сначала я установил 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'
?