Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV

OpenCV是大型的Third party 计算机视觉库,在开发中会经常用到,本篇记录一下 在Ubuntu系统上安装和配置OpenCV,并使用C/C++调用OpenCV

关于VS Code配置C/C++开发环境的部分,见之前的博文 Linux/Ubuntu系统下使用VS Code配置C/C++开发环境

1. 准备工作

(1)更新下环境

sudo apt-get update
sudo apt-get upgrade

(2)安装编译器和构建工具等,若已安装,跳过即可

复制代码

sudo apt-get install -y g++            # Ubuntu自带gcc
sudo apt-get install -y cmake
sudo apt-get install -y make
sudo apt-get install -y wget 
sudo apt-get install -y unzip
sudo apt-get install -y git

复制代码

(3)安装各种依赖库

复制代码

 sudo apt-get install build-essential pkg-config 
 sudo apt-get install libgtk2.0-dev libgtk-3-dev libglib2.0-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev liblapacke-dev libxvidcore-dev libx264-dev
 sudo apt-get install python-dev python-numpy
 sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
 sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper1 libjasper-dev libdc1394-22-dev libopenexr-dev libwebp-dev
 sudo apt-get install libatlas-base-dev gfortran 
 sudo apt-get install ffmpeg

复制代码

安装依赖库libjasper1 和 libjasper-dev时,若报错E:Unable to locate package libjasper-dev ,可以命令行执行以下命令,然后再安装依赖库 libjasper1 libjasper-dev

 sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"            # 国内可能需要换国内的镜像
 sudo apt-get update 

2. 下载OpenCV的源文件

可以在官网下载,也可以使用GitHub,这里选择git clone方式,下载的opencv文件夹在home目录下

 git clone https://github.com/opencv/opencv.git        # 默认下载最新的版本
 git -C opencv checkout 4.x

3. 生成构建脚本和编译

(1)cd切换到 opencv目录下,创建build文件夹,并切换到build目录下

(2)在build目录下使用cmake来生成构建脚本,使用如下命令,

 cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FFMPEG=ON ..                # .. 不要漏掉

(3)在build目录下编译opencv

4. 安装OpenCV

编译成功后,在build目录下执行安装命令,等待安装完成

5. 配置环境

(1)配置环境变量:PKG_CONFIG_PATH

前面进行cmake时,已经生成了opencv4.pc配置文件,该文件的安装路径为:/usr/local/lib/pkgconfig/opencv4.pc

在build目录下使用命令查看一下

我们需要将opencv4.pc的路径添加到环境变量PKG_CONFIG_PATH中,创建一个名为pkgconfig.sh的脚本文件,如图

在pkgconfig.sh文件中添加下面一行语句,保存后关闭。

 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

然后刷新环境变量,使之生效。

 source /etc/profile

配置环境变量PKG_CONFIG_PATH 完成后,就可以使用pkg-config命令来查看和管理opencv的配置文件(也就是opencv4.pc)

(2)配置OpenCV的动态库环境

我们需要将OpenCV的libs的安装目录添加到动态库加载配置文件中,这样在编译时,才能找到OpenCV的各种库文件,下面创建opencv4.conf 

在文件中添加下面一行

 /usr/local/lib

刷新一下动态库环境

 sudo ldconfig

6. 测试安装及配置是否成功

使用OpenCV自带的示例,按照下图操作

执行完以上命令后会调用摄像头,显示如下即成功。

7. 通过 cmake和gcc 来构建C/C++程序调用OpenCV

(1)在home目录下新建一个文件夹W_CPP,

(2)在W_CPP文件夹下写一个test.cc程序,如下:

(3)在同一文件夹下写一个CMakeLists.txt,如下

复制代码

# cmake needs this line
cmake_minimum_required(VERSION 3.10)
# Define project name
project(W_CPP)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
# set "-std=c++11"
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

# Add OpenCV headers location to your include paths
# include_directories(${OpenCV_INCLUDE_DIRS})

# Declare the executable target built from your sources
add_executable(test test.cc)
# Link your application with OpenCV libraries
target_link_libraries(test PRIVATE ${OpenCV_LIBS})

复制代码

(4)在同一文件夹下放一张图片,比如 flying.jpeg

(5)命令行切换到W_CPP目录下,依次执行以下命令,

 cmake .
 make
./test flying.jpeg

以上执行成功,会显示图片,

8. 使用VS Code 配置C/C++项目环境来调用OpenCV

关于VS Code配置C/C++开发环境的准备部分,见本篇开始处的链接,下面直接配置文件,

(1)用VS Code打开W_CPP文件夹,在该目录下写一个test2.cc程序,

(2)配置tasks.json文件

(3)配置launch.json文件

(4)配置c_cpp_properties.json文件

(5)配置完成后,运行编译,开始调试

编译源文件:test2.cc保持打开状态,在VS Code菜单项找到 Terminal --> Run Build Task... ,点击运行

调试test2.cc:同样保持打开,在VS Code菜单项找到 Run --> Start Debugging ,点击运行(或使用F5),会显示图片:

OpenCV的安装、配置及调用演示整个过程到此结束。

OpenCV Contrib扩展库的安装也类似,以后补充。 

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FFMPEG=ON ..      

<think>我们正在处理的是在Ubuntu系统下使用VSCode编译调试调用OpenCV库的C++程序的配置方法。结合之前的错误(关于libIlmImf-2_3.so.24找不到)和引用内容,我们需要确保: 1. 正确安装OpenCV(包括配置pkg-config,以便于查找OpenCV的库和头文件)。 2. 在VSCode配置三个重要的json文件:c_cpp_properties.json(用于IntelliSense)、tasks.json(编译任务)、launch.json(调试配置)。 3. 特别注意库路径的设置,避免出现动态库找不到的问题。 以下为详细步骤: ### 1. 确保OpenCV安装正确并配置pkg-config 在Ubuntu上安装OpenCV后,需要确保`pkg-config`可以找到OpenCV。在终端中运行: ```bash pkg-config --libs --cflags opencv4 ``` 如果正常输出编译选项和链接选项,则说明配置正确。如果没有,可能需要设置环境变量`PKG_CONFIG_PATH`,例如: ```bash export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ``` 然后将此环境变量添加到`~/.bashrc`中永久生效。 ### 2. 配置VSCode的json文件 #### 2.1 c_cpp_properties.json(用于IntelliSense) 此文件用于配置头文件路径和编译器设置,使得代码提示和跳转正确。在VSCode中按`Ctrl+Shift+P`,输入`C/C++: Edit Configurations (UI)`,或者直接在`.vscode`文件夹中创建`c_cpp_properties.json`。配置示例: ```json { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", // 添加OpenCV的头文件路径,根据安装路径调整 "/usr/local/include/opencv4" ], "defines": [], "compilerPath": "/usr/bin/g++", // 使用g++编译器 "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64", "configurationProvider": "ms-vscode.cmake-tools" // 如果使用CMake则启用 } ], "version": 4 } ``` #### 2.2 tasks.json(编译任务) 这个文件用于定义编译任务(相当于在命令行中使用g++编译)。创建或修改`.vscode/tasks.json`: ```json { "version": "2.0.0", "tasks": [ { "label": "build opencv program", // 任务名称,与launch.json中的preLaunchTask对应 "type": "shell", "command": "g++", "args": [ "-g", // 生成调试信息 "${file}", // 当前文件 "-o", "${workspaceFolder}/build/${fileBasenameNoExtension}", // 输出到build目录 // 使用pkg-config获取OpenCV的编译选项 "`pkg-config --cflags --libs opencv4`" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] } ``` 注意:这里使用了反引号执行pkg-config命令,如果遇到问题,可以尝试将pkg-config的输出直接写为字符串(但这样不够灵活),或者使用一个shell脚本来封装编译命令。 #### 2.3 launch.json(调试配置) 此文件用于配置调试器。在VSCode中,切换到调试视图,点击“创建launch.json文件”或者手动创建: ```json { "version": "0.2.0", "configurations": [ { "name": "Debug opencv", // 配置名称 "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/${fileBasenameNoExtension}", // 可执行文件路径 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, // 如果需要在外部控制台运行,设为true(Linux下可能不支持) "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build opencv program", // 必须与tasks.json中的label一致 "miDebuggerPath": "/usr/bin/gdb" } ] } ``` ### 3. 解决动态库加载问题 即使编译通过,运行时可能还会出现动态库找不到的情况(如之前提到的libIlmImf-2_3.so.24)。解决方法: #### 方法1:在launch.json中设置环境变量`LD_LIBRARY_PATH` ```json "environment": [ { "name": "LD_LIBRARY_PATH", "value": "/home01/gitcode/APA_SOC/OSS/lib/linux-x86/opencv-4.4:${env:LD_LIBRARY_PATH}" } ], ``` #### 方法2:使用系统级配置(推荐) 将OpenCV的库路径添加到系统库配置中(需要root权限): ```bash sudo sh -c 'echo "/home01/gitcode/APA_SOC/OSS/lib/linux-x86/opencv-4.4" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig ``` ### 4. 测试 创建一个简单的OpenCV程序(例如显示一张图片)进行测试: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); imshow("Display window", image); waitKey(0); return 0; } ``` 按F5进行调试,程序应能正常运行并显示图片。 ### 注意事项 - 如果使用非系统默认安装的OpenCV(比如自己编译安装在自定义路径),需要确保在编译和运行时都能找到对应的库和头文件。 - 在tasks.json中使用pkg-config命令时,确保OpenCV的pkg-config文件(opencv4.pc)在PKG_CONFIG_PATH指定的目录下。 通过以上步骤,应该能够在VSCode中成功编译调试调用OpenCVC++程序。 --- ### 相关问题 1. 如何在Ubuntu上安装OpenCV配置环境变量? 2. 如何使用CMake在VSCode配置OpenCV项目? 3. 如何解决VSCode调试时动态库加载失败的问题? </think>### UbuntuVSCode编译调试C++程序调用OpenCV库的完整配置方法 #### 1. **安装必要依赖** ```bash sudo apt update sudo apt install build-essential cmake gdb pkg-config libopencv-dev ``` #### 2. **验证OpenCV安装** ```bash pkg-config --modversion opencv4 # 应显示4.x.x版本 pkg-config --cflags --libs opencv4 # 检查头文件和库路径 ``` #### 3. **VSCode配置步骤** 在项目根目录创建`.vscode`文件夹,包含三个配置文件: **a. c_cpp_properties.json** - 配置IntelliSense ```json { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/include/opencv4" // OpenCV头文件路径 ], "defines": [], "compilerPath": "/usr/bin/g++", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 } ``` **b. tasks.json** - 编译任务配置 ```json { "version": "2.0.0", "tasks": [ { "label": "build-opencv", "type": "shell", "command": "g++", "args": [ "-g", // 生成调试信息 "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "`pkg-config --cflags --libs opencv4`" // 自动获取OpenCV参数 ], "group": { "kind": "build", "isDefault": true } } ] } ``` **c. launch.json** - 调试配置 ```json { "version": "0.2.0", "configurations": [ { "name": "Debug OpenCV", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [{ "name": "LD_LIBRARY_PATH", "value": "/usr/local/lib" // OpenCV库路径 }], "externalConsole": false, "MIMode": "gdb", "preLaunchTask": "build-opencv" // 编译任务名 } ] } ``` #### 4. **测试代码示例** 创建`test_opencv.cpp`: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); if(image.empty()) { printf("Error loading image\n"); return -1; } imshow("OpenCV Test", image); waitKey(0); return 0; } ``` #### 5. **编译调试流程** 1. 保存所有配置文件 2. 打开测试代码文件 3. 按`F5`启动调试: - 自动编译生成可执行文件 - 启动GDB调试器 - 可设置断点、检查变量 #### 6. **常见问题解决** 1. **库路径错误**:在`launch.json`中确认`LD_LIBRARY_PATH`包含OpenCV库路径 ```bash sudo find / -name "libopencv_*" 2>/dev/null # 查找库位置 ``` 2. **pkg-config失效**:手动指定路径: ```json "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-I/usr/include/opencv4", "-lopencv_core", "-lopencv_imgcodecs", "-lopencv_highgui" ] ``` 3. **调试崩溃**:在`launch.json`中添加: ```json "setupCommands": [{ "description": "Enable GDB pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true }] ``` #### 7. **最终效果验证** ```mermaid graph LR A[编辑代码] --> B[按F5调试] B --> C[自动编译] C --> D[加载调试会话] D --> E[断点调试] E --> F[图像窗口显示] ``` 成功运行时将显示加载的图像窗口,表明OpenCV调用正确[^1][^2]。 --- ### 相关问题 1. CMake项目如何配置VSCode调试OpenCV程序? 2. 如何解决VSCode调试时"Unable to start debugging"错误? 3. OpenCV在不同Ubuntu版本中的安装差异有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一对一答疑的编程作家朱文伟

谢谢大爷谢谢大爷谢谢大爷谢谢大

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值