1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工。
下载,选择sources版本.
2.解压下载下来的zip包
unzip opencv-3.4.1.zip
3.进入到解压后的文件包中
4.安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限,再sudo apt-get update,然后在执行下面命令
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
5.安装完cmake之后执行命令 ,创建编译文件夹
mkdir my_build_dir
cd my_build_dir
6.cmake一下
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
注意:如果已经在新的文件夹中编译,但是还会出现之前的报错,把cmakecache.txt删了再编译就可
7.执行命令,漫长的编译过程(用nproc命令查看自己的线程数,我的是12线程,用sudo make -j12会快很多喔)
sudo make
8.执行命令
sudo make install
9.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加
/usr/local/lib
10.执行如下命令使得刚才的配置路径生效
sudo ldconfig
这个时候可能会提示错误如下图所示(上部分)
sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符号连接
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符号连接
出现这个错误可能是由于系统BUG所致
只需要分别输入上面图下部分的四行命令就可解决
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1
11.配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,执行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
12.至此所有的配置都已经完成
下面用一个小程序测试一下
找到
cd到opencv-3.4.1/samples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行
cmake .
make
./opencv_example
即可看到打开了摄像头,在左上角有一个hello opencv
即表示配置成功
在ubuntu下删除opencv的步骤如下:
1)进入opencv的源代码文件夹下的release(这是你在安装opencv时候自己命名的,cmake时候所在的目录)
2)依次执行下面的代码
make uninstall
cd ..
sudo rm -r release
sudo 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
或者说是cd /home/hy/opencv/build make uninstall//卸载掉配置路径中的文件 sudo rm -r build//删除build文件 //删除掉环境中有关的其余包 sudo 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* cd /home/hy chmod a+x opencv//给opencv权限 rm -r opencv//如果删除还是有文件权限不够,可以继续给相应文件权限,chomd a+x 文件名
ubuntu16.04系统自带python2和python3。直接命令行中,python,python3就可以使用并查看相应版本。
但我们一般也会装anaconda集成包,因为他包含了python以及相关安装包。使用起来比较方便。
但是从源码安装编译opencv时却因为anaconda这个包的存在埋了不少坑。
本人之前先在系统自带python的基础上又安装了anaconda3,并将anaconda3中的python3.6加入到系统路径中,这样系统就会一直调用anaconda3中python3.6.
然后再从源码安装编译opencv3.4.0,这时候会出现一个问题。编译时要生成python可以调用的cv2.so,需要调用python编译器,但此时opencv源码中的cmakelist懵了,不知道用系统自带还是anaconda中的python,干脆就放弃了编译生成这个python接口可调用的cv2.so文件。所以此时无论在系统python环境下还是anaconda python环境下都不能import cv2.
当然有些人可能为了继续在anaconda中import cv2投机取巧用conda安装阉割版的opencv-python,但请原谅我是个完美主义者,不想用这种方式糊弄我自己,我会寝食难安0.0,哈哈,just for fun!(sorry!)
想要用完整版的opencv,有两种解决方式:
一种是修改opencv的cmake编译选项,指明编译时使用的python编译器为anaconda python。
cmake -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=~/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.6m -D PYTHON3_LIBRARY=~/anaconda3/lib/libpython3.6m.so.1.0 -D PYTHON_NUMPY_PATH=~/anaconda3/lib/python3.6/site-packages ..
下载opencv并解压,在解压后的文件夹中:
mkdir build #新建一个build文件夹,编译的工程都在这个文件夹里
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D BUILD_NEW_PYTHON_SUPPORT=ON -D PYTHON_EXECUTABLE=/path/to/anaconda3/bin/python3 -DPYTHON_INCLUDE_DIR=/path/to/anaconda3/include/python3.6m -DPYTHON_LIBRARY=/path/to/anaconda3/lib/libpython3.6m.so -DPYTHON_NUMPY_INCLUDE_DIRS=/path/to/anaconda3/lib/python3.6/site-packages/numpy/core/include ..
注意把PYTHON_EXECUTABLE,PYTHON_INCLUDE_DIR,PYTHON_LIBRARY,PYTHON_NUMPY_INCLUDE_DIRS中的目录换成自己安装的anaconda的目录。
第二种是将annaconda系统路径屏蔽(当然最好是一开始就先装opencv,这样系统自动用系统自带python进行编译,等生成了cv2.so再安装anaconda)。
使用系统自带的python2和python3编译分别会生成cv2.so和cv2.cpython-35m-x86_64-linux-gnu.so这就是我们分别在anaconda2和anaconda3中import的cv2模块。
因为我的是anaconda3,所以首先进入到~/opencv-3.4.0/my_build_dir/lib/python3目录下将其中的cv2.cpython-35m-x86_64-linux-gnu.so复制到anaconda下。(如果是anaconda2就直接将cv2.so复制进去就可以了)
sudo cp cv2.cpython-35m-x86_64-linux-gnu.so /home/zya/anaconda3/lib/python3.6/site-packages/
然后改名sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
当然你不愿意复制也可以使用建立软链接的方式
ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so /anaconda3/lib/python3.6/site-packages/cv2.so
然后问题完美解决了!