这里用到的是pyenv,为多版本python建立了虚拟环境。
一、首先要安装依赖项:
基本:sudo apt install build-essential -y
必须:sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev -y
可选:sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -y
二、编译
从官网上下载opencv3.1.zip进行解压
在终端里输入:
cd ~/opencv-3.1.0
mkdir build
cd build
如果只需要编译一个python版本的opencv ,就输入:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
接着来说pyenv多版本的。先启动虚拟环境,比如env361
安装numpy:pip install numpy
接着依次输入:
PREFIX_MAIN=`pyenv virtualenv-prefix`
PREFIX=`pyenv prefix`
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-D CMAKE_INSTALL_PREFIX="$PREFIX" \
-D PYTHON3_EXECUTABLE="$PREFIX"/bin/python3 \
-D PYTHON3_PACKAGES_PATH="$PREFIX"/lib/python3.6/site-packages \
-D PYTHON3_LIBRARY="$PREFIX_MAIN"/lib/libpython3.6m.so \
-D PYTHON3_INCLUDE_DIRS="$PREFIX_MAIN"/include/python3.6m \
-D PYTHON3_NUMPY_INCLUDE_DIRS="$PREFIX"/lib/python3.6/site-packages/numpy/core/include \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_legacy=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -DENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_INSTALL_PREFIX="$PREFIX" -D PYTHON3_EXECUTABLE="$PREFIX"/bin/python3 -D PYTHON3_PACKAGES_PATH="$PREFIX"/lib/python3.6/site-packages -D PYTHON3_LIBRARY="$PREFIX_MAIN"/lib/libpython3.6m.so -D PYTHON3_INCLUDE_DIRS="$PREFIX_MAIN"/include/python3.6m -D PYTHON3_NUMPY_INCLUDE_DIRS="$PREFIX"/lib/python3.6/site-packages/numpy/core/include -D INSTALL_C_EXAMPLES=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_opencv_python3=ON -D BUILD_opencv_legacy=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..
由于可能出现视频无法读取的问题,所以加入额外的一些选项:
sudo apt install ffmpeg
cmake -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
这样opencv编译配置就配置好了。继续输入:
make -j8(这里的 -j8 指的是电脑CPU的线程数,或者直接 -j 让计算机自己选择线程数)
error: ‘NppiGraphcutState’ has not been declared
解决方案:需要修改一处源码: 在graphcuts.cpp中将
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
sudo make install
安装完成,进入python用import cv2来试一下。