• 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算法试试吧。

  • 相关阅读:
    ES基础(五十五)在私有云与公有云上管理与部署 Elasticsearch 集群
    ES基础(五十四)如何对集群进行容量规划
    ES基础(五十二)Hot & Warm 架构与 Shard Filtering
    ES基础(四十九)集群内部安全通信
    ES基础(四十八)集群身份认证与用户鉴权
    kata + docker run & star
    libcontainer nsexec + unshare + syscall(SYS_setns
    docker createHooks
    mount namespace
    exec.Command("/proc/self/exe", "child")
  • 原文地址:https://www.cnblogs.com/mar-q/p/7490271.html
Copyright © 2020-2023  润新知