当前位置: 首页 > backend >正文

VsCode 上的Opencv(C++)环境配置(Linux)

1.下载Opencv

1.新建文件demo_cpp,在demo_cpp中新建third_parties文件

2.OPENCV官网下载OpenCV-4.12.0

3.将下载好的opencv-4.12.0.zip压缩包在third_parties中解压,

//以下均无特殊说明,均在vscode里的TERMINAL中输入
sudo apt-get install unzip//用于解压.zip文件
cd third_parties//切换到third_parties文件中
unzip opencv-4.12.0.zip//解压opencv-4.12.0.zip到当前目录
cd opencv-4.12.0//切换到opencv-4.12.0文件中

4.在解压后的opencv-4.12.0文件中新建build文件

mkdir build//新建build文件
cd build//切换到build文件夹中

5.在TERMINAL中输入cmake

cmake ..//使用 ../CMakeLists.txt 文件作为起始点在当前目录中生成makefile

6.cmake成功执行后在terminal中输入make

7.在新建demo_cpp文件中新建CMakeLists.txt配置文件

2.配置文件调用Opencv库

编辑CMakeLists.txt配置文件

2.1 声明 CMake 版本和项目名

  • 指定本项目中cmake最低版本.查询cmake版本方法:使用快捷键(CTRL ALT T)调出终端,中输入cmake --version.
cmake_minimum_required(VERSION 3.22.1)
  • 定义项目名称并指定项目使用的编程语言,名字会被保存在一个叫 PROJECT_NAME 的 CMake 变量中
project(demo_cpp LANGUAGES CXX)

2.2定位库路径

通过set和find_package找到 OpenCV 库的位置和配置。

  • 手动设置一个名为 OpenCV_DIR 的 CMake 变量,并将其值设置为指定的路径.

./third_parties/opencv-4.12.0/build/ 是OpenCV_DIR这个变量被赋予的值。这是一个相对路径,它基于运行 cmake 命令的当前目录(通常是项目根目录),指向一个名为 third_parties 的文件夹下的 OpenCV 都build目录。这个很关键,如果没有标准安装Opencv到系统标准路径,CMake无法找到他.这个指令告诉CMake,我想要的OpenCV就在这,别去其他地方找了.

set(OpenCV_DIR ./third_parties/opencv-4.12.0/build/)
  • 查找配置文件

根据OpenCV_DIR指定的路径来寻找Opencv的配置文件(OpenCVConfig.cmake)。find_package是CMake用来寻找外部依赖包的核心指令,CMake根据OpenCV这个名字去寻找FindOpenCV.cmake或者OpenCVConfig.cmake.

REQUIRED是表示这个依赖是必须的关键字,如果CMake在任何路径上都找不到OpenCV的配置文件,会报错.如果成功找到,会定义CMake变量:OpenCV_INCLUDE_DIRS,包含了 OpenCV 所有头文件 (.hpp) 的目录路径.OpenCV_LIBS包含所有需要链接的OpenCV库文件名称列表

find_package(OpenCV REQUIRED)
  • 配置编译

通过include_directories告诉编译器去哪里找头文件。

将指定的目录添加到编译器的头文件搜索路径中,告诉编译器除了标准路径,也要到这些目录里去找头文件.${OpenCV_INCLUDE_DIRS}是变量引用语法。CMake 会将其替换为find_package(OpenCV)功后自动设置的变量值(即 OpenCV 头文件的实际路径).

如果出现报错:fatal error: opencv2/opencv.hpp: No such file or directory,请检查这个文件,他让编译器知道头文件还可以在哪.

include_directories(${OpenCV_INCLUDE_DIRS})
  • 定义执行的文件

通过add_executable声明要生成什么可执行文件,用什么源文件生成。

cpp.add_executable()用于创建可执行文件目标,main是目标名称,src/main.cpp是构建这个可执行文件依赖的源文件

add_executable(main src/main.cpp)//告诉cmake生成一个main的可执行文件,他的源代码是src/main.
  • 配置链接

通过target_link_libraries告诉链接器需要连接哪些第三方库。

指定可执行文件在链接(Linking)阶段需要连接哪些库.target_link_libraries()用于将库链接到指定的目标(这里是main),main是add_executable()定义的目标名称.${OpenCV_LIBS}是变量引用,可告诉链接器需要接的第三方库.

target_link_libraries(main ${OpenCV_LIBS})

运行 cmake 命令时,它就是根据这份“说明书”来生成 Makefile。随后当你运行 make 时,编译器 (g++) 和链接器 (ld) 就会根据 Makefile 中的具体指令,调用你在 CMakeLists.txt 中设置的路径和库,最终编译链接出 main 这个可执行文件。

3.使用库

在命令行中使用库

1.回到根目录下~/project/demo_cpp

2.切换到根目录下的build中,如果没有build,使用mkdir build新建一个.

3.输入cmake .. ,完成后输入make

4.选则CMake:Configure运行

4.运行可能出现的报错

main()函数

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{auto picture1 = imread("../picture.jpeg");//读取名称为picture.jpeg的照片Mat graymat;cvtColor(picture1, graymat, COLOR_BGR2GRAY)//将picture变灰,数据存在graymat中imwrite("grey.jpeg", graymat);//将数据输出为图片,命名为grey.jpegMat image = imread("grey.jpeg");//读取这个图片if(image.empty()){printf("could not open or find picture");return -1;}imshow("grey.jpeg", image);//在屏幕上输出image图片}
  • 错误1:使用imshow函数时可能会发生报错"/home/vboxuser/project/demo cpp/build/mainterminate called after throwing an instance of 'cv::Exception'what():OpenCV(4.12.0)/home/vboxuser/project/demo_cpp/third parties/opencv-4.12.0/modules/highgui/src/window.cpp:1284: error: (-2:Unspecifed error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support, If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-confg, then re-run cmake or confgure script infunction 'cvNamedWindow'"

错误表明OPenCV高阶图形界面功能未正常实现,通常是由于缺少GTK+等GUI库支持导致的.

解决办法:

第一步:在CTRL ALT T调出终端中输入

sudo apt-get install libgtk2.0-dev pkg-config
sudo apt-get install libgtk-3-dev

第二步:进入Opencv源码目录的build文件夹,输入

cmake -DWITH_GTK=ON -DWITH_GTK_2_X=ON ..
make -j$(nproc)
sudo make install
  • 错误2:/usr/bin/gcc -fdiagnostics-color=always -g /home/vboxuser/project/demo cpp/src/main.cpp -o /home/vboxuser/project/demo cpp/src/main;        /home/vboxuser/project/demo cpp/src/main.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory

原因:运行时使用右上角的运行按钮

解决方法:

1.安装CMake插件

2.CTRL SHIFT P调出命令面板,输入CMake:Configure,鼠标点击,选则.

3.此时界面底端出现CMake Tools 插件提供的 Build、Run和debug.用这3个按钮编译\调试\运行程序,不要使用右上角的运行按钮.

注:对于 CMake 管理的项目,请你忘记所有其他的运行方式,始终只使用 VS Code 底部状态栏由 CMake Tools 插件提供的 Build、Run和 Debug按钮来编译、运行和调试你的程序,把右上角的那个运行按钮忘掉,它不适用于复杂的 CMake 项目.-----阿彦社长

4.如果依然出现报错,CTRL ALT T,在终端中输入pkg-config --cflags opencv4,查找库所在位置

再打开隐藏文件.vscode中的c_pp_properties.json,编辑includePath,将查找到的路径添加进去

再添加配置"configurationProvider": "ms-vscode.cmake-tools"

  • 错误3:点击debug时,会出现报错,WARN:0@0.049] global loadsave.cpp:275 findDecoder imread ('grey.jpeg'): can't open/read file: check file path/integrity could not open or find image[l] + Done"/usr/bin/gdb" --interpreter=mi.-tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-trnvjfx.h3c" 1>"/tmp/Microsoft-MIEngine-0ut-13qxhr52.wlf"

原因:debug时,是在build下调试的,而auto picture1 = imread("picture.jpeg");是告诉CMAKE在当前目录寻找picture.jpeg文件.

解决方法:改为auto picture1 = imread("../picture.jpeg"),告诉Cmake去我当前所在路径的上一个文件中寻找picture.jpeg.或者将"../picture.jpeg"改为你存放照片的地址.

http://www.xdnf.cn/news/18374.html

相关文章:

  • 51单片机-中断系统
  • Ansys Motor-CAD:概述(EMag、THERM、LAB、MECH)
  • 171-基于Flask的笔记本电脑数据可视化分析系统
  • Linux数字列排序命令
  • Apache Ozone 介绍与部署使用(最新版2.0.0)
  • 大数据毕业设计推荐:基于Hadoop+Spark的手机信息分析系统完整方案
  • Matrix-Zero:昆仑万维发布的AI世界模型,支持单张图生成3D世界
  • 微信小程序,事件总线(Event Bus) 实现
  • 不同类型代理 IP 在爬虫场景下的表现对比
  • 05 ODS层(Operation Data Store)
  • 集成电路学习:什么是Camera Calibration相机标定
  • 【自用】JavaSE--网络通信
  • 电脑芯片其实更偏向MPU不是CPU,GPU CPU NPU MPU MCU的区别
  • 近端策略优化算法PPO的核心概念和PyTorch实现详解
  • ElasticSearch——常用命令
  • 数据结构-HashSet
  • Android auncher3实现简单的负一屏功能
  • 基于SpringBoot的宠物用品系统【2026最新】
  • Android面试指南(四)
  • AI研究引擎的简单技术实现步骤
  • [软件开发技术栈]从MVVM到MVC
  • 机器学习5
  • Linux入门DAY29
  • (19)python复杂度计算:在线AI(时间复杂)和本地工具(圈复杂度)
  • 什么是Qoder?如何下载?如何体验?Qoder和其他 AI IDE 什么区别?
  • 7.Shell脚本修炼手册---awk基础入门版
  • NewsNow搭建喂饭级教程
  • Java实战:深度解析SQL中的表与字段信息(支持子查询、连接查询)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 今天,字节开源Seed-OSS-36B模型,512k上下文