ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu下使用VSCode配置OpenCV开发环境教程

Ubuntu下使用VSCode配置OpenCV开发环境教程

1. 项目概述

在计算机视觉和图像处理领域,OpenCV作为开源计算机视觉库已经成为行业标准工具。但在Linux环境下,特别是Ubuntu系统中配置OpenCV开发环境,对于初学者来说往往是个不小的挑战。本教程将手把手带你完成从零开始的环境搭建,使用VSCode作为IDE,通过CMake构建系统来编译安装OpenCV,并配置完整的开发环境。

注意:本教程基于Ubuntu 22.04 LTS系统,但同样适用于大多数Linux发行版,包括Ubuntu 20.04、18.04等版本。不同版本间可能有些许差异,我会在关键步骤中注明版本差异。

2. 环境准备与依赖安装

2.1 系统更新与基础依赖

首先确保系统是最新的,打开终端执行:

sudo apt update && sudo apt upgrade -y

接下来安装编译OpenCV所需的基础工具链:

sudo apt install -y build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ gfortran openexr libatlas-base-dev python3-dev python3-numpy \ libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

这些依赖包涵盖了视频编解码、图像格式支持、Python接口等OpenCV核心功能所需的库文件。如果某些包无法找到,可以尝试添加universe和multiverse仓库:

sudo add-apt-repository universe sudo add-apt-repository multiverse sudo apt update

2.2 安装VSCode与必要插件

从官网下载.deb安装包或使用以下命令安装VSCode:

sudo apt install wget wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' sudo apt update sudo apt install code

安装完成后,启动VSCode并安装以下必要插件:

  • C/C++ (Microsoft)
  • CMake Tools
  • CMake
  • Python (如果使用Python接口)

3. OpenCV源码编译与安装

3.1 获取OpenCV源码

建议从GitHub克隆最新稳定版源码:

mkdir ~/opencv_build && cd ~/opencv_build git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git

如果需要特定版本,可以在clone后checkout:

cd opencv git checkout 4.5.5 cd ../opencv_contrib git checkout 4.5.5

3.2 CMake配置

创建构建目录并运行CMake:

cd ~/opencv_build/opencv mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON \ -D WITH_GTK=ON \ -D WITH_FFMPEG=ON \ -D WITH_CUDA=OFF \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D BUILD_opencv_python3=ON \ -D PYTHON3_EXECUTABLE=$(which python3) \ -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

关键参数说明:

  • CMAKE_INSTALL_PREFIX:指定安装目录
  • OPENCV_EXTRA_MODULES_PATH:指向contrib模块路径
  • WITH_CUDA:是否启用CUDA加速(NVIDIA显卡)
  • OPENCV_ENABLE_NONFREE:启用专利算法

3.3 编译与安装

配置完成后开始编译:

make -j$(nproc)

-j$(nproc)参数表示使用所有CPU核心并行编译以加快速度。编译完成后安装:

sudo make install sudo ldconfig

验证安装:

pkg-config --modversion opencv4

4. VSCode项目配置

4.1 创建CMake项目

在VSCode中创建新文件夹作为项目目录,添加以下文件结构:

project/ ├── CMakeLists.txt ├── src/ │ └── main.cpp └── build/

CMakeLists.txt内容示例:

cmake_minimum_required(VERSION 3.5) project(OpenCV_Test) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(opencv_test src/main.cpp) target_link_libraries(opencv_test ${OpenCV_LIBS})

4.2 配置VSCode

创建.vscode文件夹并添加以下配置文件:

settings.json:

{ "cmake.configureOnOpen": true, "cmake.buildDirectory": "${workspaceFolder}/build", "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools" }

c_cpp_properties.json:

{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/local/include/opencv4" ], "defines": [], "compilerPath": "/usr/bin/g++", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }

5. 测试与验证

5.1 简单测试程序

在main.cpp中添加以下测试代码:

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat image = imread("test.jpg"); if(image.empty()) { cout << "Could not open or find the image" << endl; return -1; } namedWindow("Display window", WINDOW_AUTOSIZE); imshow("Display window", image); waitKey(0); return 0; }

5.2 构建与运行

在VSCode中:

  1. 按Ctrl+Shift+P打开命令面板
  2. 输入"CMake: Configure"配置项目
  3. 输入"CMake: Build"构建项目
  4. 在终端中运行:
cd build ./opencv_test

6. 常见问题与解决方案

6.1 找不到OpenCV包

如果CMake报错找不到OpenCV,尝试以下解决方案:

sudo apt install libopencv-dev python3-opencv

或者在CMakeLists.txt中显式指定路径:

set(OpenCV_DIR "/usr/local/share/opencv4") find_package(OpenCV REQUIRED)

6.2 视频相关功能无法使用

确保安装了FFmpeg并重新编译:

sudo apt install libavcodec-dev libavformat-dev libswscale-dev

6.3 Python接口问题

如果Python无法导入cv2,检查Python包路径:

python3 -c "import cv2; print(cv2.__file__)"

如果不在标准路径,可以创建符号链接:

sudo ln -s /usr/local/lib/python3.8/dist-packages/cv2 /usr/lib/python3/dist-packages/cv2

7. 性能优化建议

7.1 启用硬件加速

如果有Intel处理器,可以启用IPPICV:

-D WITH_IPP=ON

如果有NVIDIA显卡,启用CUDA:

-D WITH_CUDA=ON \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN=7.5 \ # 根据你的显卡计算能力设置 -D CUDA_FAST_MATH=ON

7.2 精简编译

如果不需要所有模块,可以禁用部分:

-D BUILD_opencv_java=OFF \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_ts=OFF \ -D BUILD_opencv_dnn=OFF

8. 进阶配置

8.1 多版本共存

如果需要多个OpenCV版本共存,可以修改安装路径:

-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.5

然后使用时指定路径:

set(OpenCV_DIR "/usr/local/opencv-4.5.5/share/opencv4")

8.2 调试符号

开发时建议添加调试符号:

-D CMAKE_BUILD_TYPE=DEBUG

8.3 自定义模块

如果需要添加自定义模块,可以在OPENCV_EXTRA_MODULES_PATH中添加多个路径:

-D OPENCV_EXTRA_MODULES_PATH="path1;path2;path3"

9. 项目维护

9.1 更新OpenCV

要更新OpenCV版本:

cd ~/opencv_build/opencv git pull origin master cd ../opencv_contrib git pull origin master cd ../opencv/build make clean cmake .. make -j$(nproc) sudo make install

9.2 卸载OpenCV

如果需要卸载:

cd ~/opencv_build/opencv/build sudo make uninstall

10. 实际开发建议

在真实项目开发中,建议:

  1. 使用CMake的find_package机制而不是硬编码路径
  2. 为不同构建类型(Release/Debug)创建不同目录
  3. 使用CMake的option()命令创建可配置选项
  4. 考虑使用vcpkg或conan等包管理器管理依赖
  5. 在团队开发中,将OpenCV作为子模块(submodule)引入
# 示例:条件编译 option(USE_OPENCV "Build with OpenCV support" ON) if(USE_OPENCV) find_package(OpenCV REQUIRED) target_link_libraries(my_target PRIVATE ${OpenCV_LIBS}) endif()
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进