Ubuntu16.04卸載opencv2.4.9並安裝opencv3.2.0+contrib


本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負贔屓

   

  需要用到opencv中的surf和sift算法,機器上只有opencv3.2,沒有擴展包,於是就去GitHub和官網看了下,沒想到8月剛出了3.3,一個激動就想裝個opencv3.3+contrib,不過opencv3.3+contrib這產生segment default(段錯誤,有可能是內存溢出)。完全不能用啊,可能是有些包沒下到,網上很難搜到3.3的相關模塊,如果對opencv3.3非常有興趣可以參考一下http://www.linuxfromscratch.org/blfs/view/svn/general/opencv.html。

  0:寫在最前面

  如果你只是想使用python驗證一下算法,那么恭喜你,后面不用看了。可以直接用pip獲取到帶contrib的opencv模塊,首先把你python中原有的opencv卸載掉,然后安裝帶有contrib的opencv模塊,如果沒有該包,請更換pip源,我使用的阿里源。你可以單獨為此次安裝指定源地址:

pip uninstall opencv-python pip install opencv-contrib-python pip install opencv-contrib-python -i https://mirrors.aliyun.com/pypi/simple

  修正1:如果報錯:ImportError: DLL load failed: 找不到指定的模塊。

  請在此https://www.lfd.uci.edu/~gohlke/pythonlibs/對應版本的opencv-python,我剛才在另一台電腦測試,發現了這個錯誤,電腦的環境是Python3.6,64位系統,所以我下載了opencv_python-3.3.1-cp36-cp36m-win_amd64.whl,下載完成后進入文件所在目錄,執行:

pip install opencv_python-3.3.1-cp36-cp36m-win_amd64.whl
Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2
>>> cv2.__version__

'3.3.1'
>>> exit()

  分析,這個問題導致的原因是什么捏,python其實有很多模塊在安裝的時候都會產生這個錯誤,比如安裝mysql-Python的時候,這個錯誤的原因其實是因為pip安裝的模塊可能只是一個Python的擴展模塊,而缺少對應模塊的可執行程序(相關問題可以留言給我)。

  修正2:安裝后報錯

 

>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/cv2/__init__.py", line 4, in <module>
from .cv2 import *
ImportError: libSM.so.6: cannot open shared object file: No such file or directory

 

  這是我在使用TensorFlow的docker中發現的錯誤,這個時候,不要使用某些博客推薦的安裝python-qt4的辦法,提供兩個解決方案:

 

###方案1:降低opencv版本,目前默認都是安裝opencv3.4,裝3.2即可
# pip install opencv-python==3.2.0.8
>>> import cv2
>>> cv2.__version__
'3.2.0'

###方案2:缺什么裝什么,國內更新apt比較慢,記得換掉源
# apt update && apt install -y libsm6 libxext6
###Python3.5
下安裝:apt update && apt install -y libsm6 libxext6 libxrender1 libxext-dev 
>>> import cv2
>>> cv2.__version__
'3.4.0'

 

  注意,opencv-python只能在python中使用,並且,通過pip默認安裝的都是opencv3,如果需要安裝opencv2,並且想安裝完整的opencv sourcecode寫算法,繼續往下閱讀(opencv2和3的區別主要在於部分函數的調用,opencv2覆蓋的更全面一些,給出的api接口更多):

  一、命令行查看已安裝的opencv版本

  這個命令會經常用到。也可以用上面的cv2.__version__

pkg-config --modversion opencv

  二、卸載

  首先要找到當初安裝opencv sourcecode的build目錄(如果不明白什么是build目錄可以先跳過這一步,看第3步.),進入該build目錄執行如下操作:

sudo make uninstall cd .. sudo rm -r build rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

  刪除/usr中所有opencv相關項

cd /usr/
find . -name "*opencv*" | xargs sudo rm -rf

  移除Python相關

apt-get remove opencv-doc opencv-data python-opencv

******如果找不到當初安裝的目錄,執行1,執行3,再執行2。******因為機器共享給小伙伴一起用的,我就沒找到2.4.9的安裝目錄,估計當時被刪了,所以我先下了一個249,build一遍后才uninstall的。

  三、安裝

   這里提供一個opencv3.2+contrib3.2的鏈接https://pan.baidu.com/s/1-A0I5jCnMwpRwcFpguGdqg。你也可以通過官網或者GitHub下載相應的版本,注意contrib模塊一定要下對應版本的release。

  把opencv3.2和contrib模塊解壓縮,應該是兩個文件夾,建議放在同一個目錄下。由於cmake過程中,某些模塊下載速度很慢,容易導致build失敗,需要下載的ippicv+protobuf模塊我一並放在網盤內了,拿去不謝。

  完成下載工作,進入opencv3.2:

mkdir build cd build cmake -D CMAKE_BUILD_TYPE=TELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLE=OFF \ -D INSTALL_PYTHON_EXAMPLE=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \ -D BUILD_EXAMPLES=ON .. 

  注意OPENCV_EXTRA_MODULES_PATH設置成自己的路徑。

  看看是否報錯:

ICV: Downloading ippicv_linux_20151201.tgz...   

CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):   

  如果提示缺少ippicv或者protobuf,則下載相應版本的放入錯誤提示的目錄內。

  例如,提示缺少ippicv,新建文件夾opencv3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e,把ippicv文件放入該目錄,

  再次執行cmake,確保沒有報錯。

  執行make和make install命令

make
......
make install

  打開opencv里面的sample,隨便選一個cpp,在里面增加一些例如sift、surf等nonfree算法試試吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM