1. 环境准备与依赖安装在Ubuntu 16.04系统上安装OpenCV 2.4.13之前我们需要先准备好基础环境。这个版本的Ubuntu使用的是长期支持LTS内核虽然现在已经不是最新的LTS版本但在很多老项目中仍然被广泛使用。1.1 系统更新与基础工具首先确保系统是最新的状态这可以避免很多潜在的依赖冲突问题sudo apt-get update sudo apt-get upgrade -y接下来安装编译OpenCV所需的基础工具链sudo apt-get install -y build-essential cmake git pkg-config这些工具中build-essential包含了gcc/g编译器和make工具cmake是OpenCV使用的构建系统git用于获取源代码如果需要从仓库安装pkg-config帮助查找库文件1.2 安装图像和视频处理依赖OpenCV需要处理各种图像和视频格式因此需要安装相应的编解码库sudo apt-get install -y libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install -y libxvidcore-dev libx264-dev特别注意Ubuntu 16.04默认的libpng版本是1.2.54如果需要更高版本需要手动编译安装。1.3 安装GUI和优化库如果你需要图形界面支持如HighGUI模块还需要安装GTKsudo apt-get install -y libgtk2.0-dev为了提高性能可以安装优化库sudo apt-get install -y libatlas-base-dev gfortran这些优化库对于矩阵运算特别重要可以显著提升OpenCV的性能。2. 获取OpenCV 2.4.13源代码2.1 下载源代码包OpenCV 2.4.13可以从官方仓库获取wget -O opencv-2.4.13.zip https://github.com/opencv/opencv/archive/2.4.13.zip unzip opencv-2.4.13.zip cd opencv-2.4.13如果你需要同时安装opencv_contrib模块包含额外的功能wget -O opencv_contrib-2.4.13.zip https://github.com/opencv/opencv_contrib/archive/2.4.13.zip unzip opencv_contrib-2.4.13.zip2.2 源代码目录结构解压后的目录结构如下modules/包含OpenCV的核心模块doc/文档data/测试数据CMakeLists.txtCMake构建文件了解这个结构有助于后续的编译和问题排查。3. 配置与编译OpenCV3.1 创建构建目录建议在源代码目录外创建单独的构建目录mkdir build cd build这种out-of-source构建方式是CMake推荐的做法可以保持源代码目录的干净。3.2 CMake配置执行CMake配置命令cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D WITH_TBBON \ -D WITH_V4LON \ -D WITH_QTOFF \ -D WITH_OPENGLON \ -D BUILD_EXAMPLESON \ ../opencv-2.4.13关键参数说明CMAKE_BUILD_TYPERELEASE构建发布版本CMAKE_INSTALL_PREFIX/usr/local安装路径WITH_TBBON启用Intel TBB多线程支持WITH_QTOFF在Ubuntu 16.04上建议关闭QT支持避免依赖问题如果添加了opencv_contrib模块需要额外添加参数-D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib-2.4.13/modules3.3 编译源代码配置完成后开始编译make -j$(nproc)-j$(nproc)参数会使用所有可用的CPU核心进行并行编译显著加快编译速度。在4核机器上编译大约需要30-60分钟。注意如果编译过程中出现内存不足的情况可以减少并行任务数如使用make -j23.4 安装与配置编译完成后安装到系统sudo make install sudo ldconfigldconfig命令会更新系统的动态链接库缓存确保新安装的库可以被找到。4. 验证安装4.1 检查安装结果验证OpenCV是否安装成功pkg-config --modversion opencv应该输出2.4.13。如果没有输出可能需要手动设置PKG_CONFIG_PATHexport PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH4.2 运行测试程序OpenCV自带了一些示例程序可以运行测试./bin/opencv_test_core如果没有编译示例程序可以创建一个简单的测试程序#include opencv2/core/core.hpp #include iostream int main() { std::cout OpenCV version: CV_VERSION std::endl; return 0; }编译并运行g test.cpp -o test pkg-config --cflags --libs opencv ./test5. 常见问题与解决方案5.1 编译错误缺少boostdesc_bgm.i等文件这是opencv_contrib模块的常见问题解决方法cd opencv_contrib-2.4.13/modules/xfeatures2d/src wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_lbgm.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_bgm.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_bgm_bi.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_bgm_hd.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_binboost_064.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_binboost_128.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_boostdesc_20161012/boostdesc_binboost_256.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_vgg_20160317/vgg_generated_48.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_vgg_20160317/vgg_generated_64.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_vgg_20160317/vgg_generated_80.i wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/contrib_xfeatures2d_vgg_20160317/vgg_generated_120.i5.2 运行时错误libopencv_*.so not found这是因为库路径没有被正确识别解决方法echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/opencv.conf sudo ldconfig5.3 Python绑定问题如果需要Python支持确保安装了Python开发包sudo apt-get install python-dev python-numpy然后在CMake配置中添加-D BUILD_NEW_PYTHON_SUPPORTON \ -D PYTHON_EXECUTABLE/usr/bin/python2.76. 性能优化与定制6.1 启用硬件加速如果有Intel处理器可以启用IPP加速-D WITH_IPPON如果有NVIDIA显卡可以安装CUDA并启用-D WITH_CUDAON \ -D CUDA_ARCH_BIN3.5 5.0 6.0 7.0 \ -D CUDA_ARCH_PTX \ -D WITH_CUBLASON6.2 精简构建如果只需要特定模块可以禁用不需要的功能-D BUILD_opencv_javaOFF \ -D BUILD_opencv_pythonOFF \ -D BUILD_opencv_appsOFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF6.3 静态库构建如果需要构建静态库而非动态库-D BUILD_SHARED_LIBSOFF7. 实际应用示例7.1 图像读取与显示一个简单的图像处理程序示例#include opencv2/highgui/highgui.hpp #include opencv2/imgproc/imgproc.hpp int main() { cv::Mat image cv::imread(test.jpg); if(image.empty()) { std::cerr Could not open image std::endl; return -1; } cv::Mat gray; cv::cvtColor(image, gray, CV_BGR2GRAY); cv::imshow(Original, image); cv::imshow(Gray, gray); cv::waitKey(0); return 0; }编译命令g image_demo.cpp -o image_demo pkg-config --cflags --libs opencv7.2 视频处理简单的视频捕获和处理示例#include opencv2/highgui/highgui.hpp #include opencv2/imgproc/imgproc.hpp int main() { cv::VideoCapture cap(0); // 打开默认摄像头 if(!cap.isOpened()) { std::cerr Could not open camera std::endl; return -1; } cv::namedWindow(Video, cv::WINDOW_AUTOSIZE); while(true) { cv::Mat frame; cap frame; if(frame.empty()) break; cv::Mat edges; cv::Canny(frame, edges, 50, 150); cv::imshow(Video, edges); if(cv::waitKey(30) 0) break; } return 0; }8. 维护与升级8.1 卸载OpenCV如果需要卸载cd build sudo make uninstall然后手动删除残留文件sudo rm -rf /usr/local/include/opencv2 /usr/local/include/opencv sudo rm -rf /usr/local/share/opencv /usr/local/share/OpenCV sudo rm -rf /usr/local/bin/opencv* /usr/local/lib/libopencv*8.2 升级到新版本虽然本文介绍的是2.4.13版本但升级到新版本的步骤类似。需要注意先卸载旧版本检查新版本的依赖要求可能需要更新一些系统库注意API变更新版本可能不兼容旧代码8.3 多版本共存通过设置不同的安装路径可以实现多版本共存-D CMAKE_INSTALL_PREFIX/usr/local/opencv-2.4.13使用时通过设置环境变量选择版本export PKG_CONFIG_PATH/usr/local/opencv-2.4.13/lib/pkgconfig