在计算机视觉开发领域,OpenCV始终是无可争议的基石工具库。2018年发布的3.4.4版本因其卓越的稳定性和完整的SIFT/SURF特征检测算法支持,至今仍是许多工业项目的首选。本文将详细记录在Ubuntu 16.04 Xenial系统上完整配置OpenCV 3.4.4开发环境的全流程,涵盖C++和Python双语言支持,特别针对国内开发者常见的网络环境和依赖问题提供解决方案。
首先确保系统已更新至最新状态:
bash复制sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y build-essential cmake unzip
注意:Ubuntu 16.04默认的gcc版本为5.4.0,完全满足OpenCV 3.4.4的编译要求。若系统曾升级过gcc,建议切换回默认版本以避免兼容性问题。
OpenCV的核心功能需要以下依赖包:
bash复制sudo apt-get install -y \
libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev \
libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev \
libtiff-dev libdc1394-22-dev libv4l-dev libatlas-base-dev \
gfortran python2.7-dev python3.5-dev
对于Python支持,建议使用pip安装科学计算基础包:
bash复制wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
sudo python2 get-pip.py
sudo python3 get-pip.py
sudo pip2 install numpy
sudo pip3 install numpy
从OpenCV官方仓库获取3.4.4版本源码及扩展模块:
bash复制wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.4.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.4.zip
unzip opencv.zip
unzip opencv_contrib.zip
创建编译目录并配置关键参数:
bash复制cd opencv-3.4.4
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.4/modules \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON2_EXECUTABLE=$(which python2) \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON2_INCLUDE_DIR=$(python2 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON2_LIBRARY=$(python2 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-D PYTHON3_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-D BUILD_EXAMPLES=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=OFF ..
关键参数说明:
WITH_CUDA=OFF:Ubuntu 16.04默认的CUDA 8.0与OpenCV 3.4.4存在兼容问题,建议禁用BUILD_opencv_python2=ON:保留对Python 2.7的支持OPENCV_EXTRA_MODULES_PATH:指定contrib模块路径以获取完整功能使用多线程编译加速过程:
bash复制make -j$(nproc)
sudo make install
sudo ldconfig
实测数据:在4核8GB内存的虚拟机中,完整编译耗时约45分钟。若遇到内存不足,可减少线程数如
make -j4
创建测试文件test_opencv.cpp:
cpp复制#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat image = Mat::zeros(300, 600, CV_8UC3);
putText(image, "OpenCV 3.4.4 Works!", Point(50,150),
FONT_HERSHEY_COMPLEX, 1, Scalar(0,255,255), 2);
imwrite("test.jpg", image);
return 0;
}
编译并运行:
bash复制g++ test_opencv.cpp -o test `pkg-config --cflags --libs opencv`
./test
分别测试Python2和Python3:
python复制import cv2
print(cv2.__version__) # 应输出3.4.4
img = cv2.imread('test.jpg')
cv2.imshow('Test', img)
cv2.waitKey(0)
若遇到VideoCapture无法打开视频文件,安装额外编码器:
bash复制sudo apt-get install -y libxvidcore-dev x264 libx264-dev
当出现ImportError: numpy.core.multiarray failed to import时:
bash复制sudo pip install --upgrade numpy
解决GUI窗口无法显示的问题:
bash复制sudo apt-get install -y libcanberra-gtk-module
export DISPLAY=:0
在/etc/sysctl.conf末尾添加:
code复制vm.overcommit_memory=1
执行sudo sysctl -p生效,可防止大型矩阵运算时出现内存分配错误。
虽然官方已移除IPP免费版,仍可通过编译选项启用TBB并行优化:
bash复制cmake -D WITH_TBB=ON ...
在Python中启用UMat加速:
python复制cv2.setUseOptimized(True)
cv2.ocl.setUseOpenCL(True)
为防止版本冲突,建议创建版本化链接:
bash复制sudo ln -s /usr/local/lib/python2.7/dist-packages/cv2.so /usr/local/lib/python2.7/dist-packages/cv2-3.4.4.so
在~/.bashrc中添加:
bash复制export OPENCV_DIR=/usr/local/share/OpenCV
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
如需使用SIFT/SURF等算法,在CMake时添加:
bash复制-D OPENCV_ENABLE_NONFREE=ON
提升深度学习模型加载速度:
bash复制sudo apt-get install -y protobuf-compiler
cmake -D BUILD_opencv_dnn=ON ...
如需卸载当前版本:
bash复制cd opencv-3.4.4/build
sudo make uninstall
sudo rm -rf /usr/local/include/opencv2
sudo rm -f /usr/local/lib/libopencv*