Ubuntu 22.04 源码编译 OpenCV 3.4.15:从依赖配置到环境变量实战

张开发
2026/5/4 4:51:13 15 分钟阅读
Ubuntu 22.04 源码编译 OpenCV 3.4.15:从依赖配置到环境变量实战
1. 环境准备与源码获取在Ubuntu 22.04上手动编译OpenCV 3.4.15听起来可能有点吓人但跟着我的步骤走保证你能轻松搞定。我去年在给机器人项目部署视觉系统时就遇到过必须用特定版本OpenCV的情况当时踩了不少坑现在把这些经验都整理给你。首先说为什么选择源码编译而不是直接apt安装。官方仓库里的OpenCV版本往往比较新而很多老项目比如一些ROS应用对版本有严格要求。3.4.15这个版本既稳定又兼容性好最重要的是支持SIFT/SURF这些经典算法——在新版本里它们可是被移到contrib模块了。获取源码有两种推荐方式直接下载压缩包适合网络不稳定时使用wget -O opencv-3.4.15.zip https://github.com/opencv/opencv/archive/3.4.15.zip unzip opencv-3.4.15.zip用git克隆推荐方便后续更新git clone --branch 3.4.15 https://github.com/opencv/opencv.git我强烈建议同时下载opencv_contrib很多实用功能都在这里面git clone --branch 3.4.15 https://github.com/opencv/opencv_contrib.git下载完成后你会得到两个文件夹opencv和opencv_contrib。把它们放在同一级目录下后面配置时会用到。2. 依赖项安装全攻略依赖项是编译过程中最容易出问题的地方。根据我的经验把依赖分成三个层次来装最稳妥基础编译工具链没这些连cmake都跑不起来sudo apt update sudo apt install -y build-essential cmake git pkg-config图像编解码支持处理jpg/png等格式必备sudo apt install -y libjpeg-dev libpng-dev libtiff-dev libopenexr-dev视频流处理如果你要用摄像头或处理视频sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-devGUI相关imshow等高阶功能需要sudo apt install -y libgtk-3-dev libcanberra-gtk3-dev性能加速库TBB/OpenBLAS等可以提升运算速度sudo apt install -y libtbb-dev libatlas-base-dev libopenblas-dev有次我在jetson nano上编译时发现缺少libjasper-dev导致无法处理某些图像格式后来发现这个包在Ubuntu 22.04里改名叫libjasper1-dev了。遇到类似问题时可以用apt search查找替代包名。3. CMake配置的艺术进入正题前的关键一步是CMake配置。在opencv目录下新建build文件夹cd opencv mkdir build cd build基础配置命令适合大多数场景cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_GENERATE_PKGCONFIGON \ -D WITH_GTKON \ -D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib/modules ..这里有几个参数特别说明下CMAKE_INSTALL_PREFIX指定安装路径建议保持/usr/local不变OPENCV_GENERATE_PKGCONFIG生成pc文件后面链接时要用OPENCV_EXTRA_MODULES_PATH指向contrib模块的路径高级玩家配置根据需求可选-D BUILD_opencv_python3ON \ # 启用Python3绑定 -D WITH_CUDAOFF \ # 禁用CUDAN卡用户可开启 -D BUILD_EXAMPLESOFF \ # 不编译示例代码加快编译 -D WITH_FFMPEGON \ # 启用FFmpeg支持配置完成后仔细检查输出信息。重点看是否检测到所有需要的依赖项Python/numpy版本是否正确contrib模块是否成功加载如果看到Configuring done和Generating done就说明成功了。有次我漏装了libtiff-dev在这里就提示TIFF: NO后来补装依赖才解决。4. 编译加速与安装配置通过后就可以开始编译了。这里有个小技巧使用-j参数指定并行编译线程数能大幅缩短时间。我的16核机器上用make -j$(nproc)如果是4核CPU可以make -j4编译过程大概需要30分钟到2小时取决于机器性能。期间会刷出大量warning只要不出现error就不用管。我有次编译到85%时内存不足崩溃了后来加了个8GB交换分区才解决。如果遇到类似情况可以尝试sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile编译100%完成后执行安装sudo make install这一步很快通常1分钟内完成。安装完成后OpenCV的所有文件都会被放到/usr/local目录下。5. 环境变量配置详解很多教程到安装完就结束了结果一运行程序就报错问题往往出在环境配置。下面这两个配置缺一不可动态库路径配置解决运行时找不到库的问题sudo sh -c echo /usr/local/lib /etc/ld.so.conf.d/opencv.conf sudo ldconfig我更喜欢用单独conf文件而不是修改ld.so.conf这样更干净且容易管理。pkg-config配置让编译器能找到OpenCV 编辑~/.bashrc文件在末尾添加export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH然后执行source ~/.bashrc验证配置是否成功pkg-config --modversion opencv4应该输出3.4.15。如果报错检查PKG_CONFIG_PATH是否包含/usr/local/lib/pkgconfig路径。6. 测试与项目集成终于到验证环节了用VS Code新建个测试项目CMakeLists.txt关键配置如下cmake_minimum_required(VERSION 3.10) project(opencv_test) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(test main.cpp) target_link_libraries(test ${OpenCV_LIBS})测试代码main.cpp#include opencv2/opencv.hpp #include iostream int main() { cv::Mat img cv::imread(test.jpg); if(img.empty()) { std::cout 图片加载失败检查路径 std::endl; return -1; } cv::imshow(OpenCV测试, img); cv::waitKey(0); return 0; }编译运行mkdir build cd build cmake .. make ./test如果看到图片窗口弹出恭喜你成功了我在第一次测试时遇到undefined reference错误后来发现是CMakeLists里忘记加target_link_libraries了。7. 常见问题解决方案问题1编译时报错缺少boostdesc_bgm.i等文件这是contrib模块的典型问题解决方法手动下载这些文件网上能搜到打包资源放到opencv_contrib/modules/xfeatures2d/src/目录下重新cmake和make问题2imshow()显示空白窗口多半是GUI依赖没装好检查ldd /usr/local/lib/libopencv_highgui.so | grep gtk应该看到libgtk-3.so的链接。如果没有重新安装libgtk-3-dev后编译。问题3Python import cv2报错如果要用Python绑定编译时确保安装了python3-dev和numpyCMake配置中Python3相关选项显示为YES编译后检查/usr/local/python/cv2.so是否存在最后提醒下源码编译的OpenCV卸载比较麻烦需要手动删除sudo rm -rf /usr/local/include/opencv4 sudo rm -rf /usr/local/lib/libopencv* sudo rm -rf /usr/local/share/opencv4

更多文章