在Ubuntu 22.04上从源码编译OpenCV 3.4.15:保姆级避坑指南(含contrib模块配置)

张开发
2026/4/26 5:37:43 15 分钟阅读
在Ubuntu 22.04上从源码编译OpenCV 3.4.15:保姆级避坑指南(含contrib模块配置)
在Ubuntu 22.04上从源码编译OpenCV 3.4.15保姆级避坑指南含contrib模块配置如果你正在Ubuntu 22.04上尝试从源码编译OpenCV 3.4.15特别是需要包含contrib模块时可能会遇到各种依赖问题、编译错误和环境配置的坑。本文将带你一步步完成整个编译过程并重点解决那些可能让你抓狂的常见问题。1. 准备工作与环境配置在开始编译之前确保你的Ubuntu 22.04系统已经更新到最新状态。打开终端执行以下命令sudo apt update sudo apt upgrade -y接下来我们需要安装一些基础开发工具和OpenCV的编译依赖。这些依赖项分为几个类别核心构建工具sudo apt install -y build-essential cmake git pkg-config图像I/O库sudo apt install -y libjpeg-dev libpng-dev libtiff-dev视频处理库sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-devGUI支持sudo apt install -y libgtk-3-dev优化库sudo apt install -y libatlas-base-dev gfortran libtbb2 libtbb-dev注意Ubuntu 22.04默认的软件源中某些库的版本可能与OpenCV 3.4.15不兼容。如果遇到问题可能需要添加额外的PPA或从源码编译这些依赖项。2. 获取OpenCV源码与contrib模块OpenCV 3.4.15已经是一个相对较旧的版本直接从官方Git仓库获取是最可靠的方式git clone --branch 3.4.15 https://github.com/opencv/opencv.git git clone --branch 3.4.15 https://github.com/opencv/opencv_contrib.git克隆完成后你应该有两个目录opencv和opencv_contrib。建议将它们放在同一父目录下这样后续配置会更方便。3. CMake配置与关键参数解析进入opencv目录并创建build文件夹cd opencv mkdir build cd build现在是关键步骤——CMake配置。以下是一个推荐的CMake命令包含了许多重要参数cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D INSTALL_C_EXAMPLESOFF \ -D INSTALL_PYTHON_EXAMPLESOFF \ -D OPENCV_GENERATE_PKGCONFIGON \ -D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib/modules \ -D BUILD_EXAMPLESOFF \ -D WITH_GTKON \ -D WITH_FFMPEGON \ -D WITH_TBBON \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ ..让我们解析几个关键参数OPENCV_GENERATE_PKGCONFIGON生成pkg-config文件方便其他程序查找OpenCVOPENCV_EXTRA_MODULES_PATH指向contrib模块的路径WITH_GTKON启用GTK支持Ubuntu桌面环境WITH_FFMPEGON启用视频编解码支持提示如果CMake过程中报告缺少某些依赖你需要根据错误信息安装相应的开发包。常见的缺失包包括libjasper-dev、libwebp-dev等。4. 编译与安装配置完成后就可以开始编译了。使用-j参数可以加速编译过程数字表示使用的CPU核心数make -j$(nproc)编译过程可能会持续较长时间取决于你的硬件配置。在这个过程中你可能会看到各种警告信息但只要不出现致命错误(fatal error)通常可以继续。编译完成后执行安装sudo make install最后更新系统的库缓存sudo ldconfig5. 环境配置与验证为了让系统能够正确找到OpenCV库我们需要进行一些环境配置。配置pkg-config路径echo export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig ~/.bashrc source ~/.bashrc验证安装pkg-config --modversion opencv如果一切正常这个命令应该输出3.4.15。6. 常见问题与解决方案6.1 编译过程中的错误处理问题1缺少boostdesc_bgm.i等文件这是contrib模块中一些测试文件缺失的常见问题。解决方案是手动下载这些文件cd opencv_contrib/modules/xfeatures2d/src wget https://github.com/opencv/opencv_contrib/raw/3.4.15/modules/xfeatures2d/cmake/download_boostdesc.cmake wget https://github.com/opencv/opencv_contrib/raw/3.4.15/modules/xfeatures2d/cmake/download_vgg.cmake cmake -P download_boostdesc.cmake cmake -P download_vgg.cmake问题2CUDA相关错误如果你没有NVIDIA显卡或不打算使用CUDA加速可以在CMake时禁用CUDA-D WITH_CUDAOFF6.2 运行时问题问题程序运行时找不到OpenCV库这通常是因为库路径没有正确配置。检查以下文件是否存在ls /usr/local/lib/pkgconfig/opencv.pc如果存在确保你的PKG_CONFIG_PATH环境变量包含/usr/local/lib/pkgconfig。7. 在项目中使用OpenCV 3.4.15创建一个简单的CMake项目来测试你的OpenCV安装。项目结构如下my_opencv_project/ ├── CMakeLists.txt └── main.cppCMakeLists.txt内容cmake_minimum_required(VERSION 3.10) project(opencv_test) find_package(OpenCV 3.4.15 REQUIRED) message(STATUS OpenCV library status:) message(STATUS version: ${OpenCV_VERSION}) message(STATUS libraries: ${OpenCV_LIBS}) message(STATUS include path: ${OpenCV_INCLUDE_DIRS}) add_executable(opencv_test main.cpp) target_link_libraries(opencv_test ${OpenCV_LIBS})main.cpp内容#include opencv2/opencv.hpp #include iostream int main() { cv::Mat image cv::imread(test.jpg); if(image.empty()) { std::cerr Could not open or find the image std::endl; return -1; } cv::imshow(Display window, image); cv::waitKey(0); return 0; }编译并运行这个测试程序确保OpenCV正常工作。如果一切顺利你应该能看到图像显示窗口。

更多文章