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.pswp.cn/news/920144.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql xml模板

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.example.mapper.UserMapper&quo…

docker在自定义网络中安装ElasticSearch和Kibana

创建自定义网络 创建一个名为 es-net 的桥接网络。这将作为 Elasticsearch 和 Kibana 的私有通信通道。 # 创建网络 docker network create es-net # 查看网络是否创建成功 docker network ls启动 Elasticsearch 容器 安装命令 docker run -d \--name elasticsearch \--net…

基于51单片机射频RFID停车刷卡计时收费系统设计

1 系统功能介绍 本设计题目为 基于51单片机射频RFID停车刷卡计时收费系统设计&#xff0c;旨在实现停车场车辆的刷卡计时和收费管理。系统通过单片机控制&#xff0c;结合 RFID 射频识别技术、LCD1602 显示以及蜂鸣器报警&#xff0c;实现停车时间的智能计时、累加及超时提醒功…

Netty源码—性能优化和设计模式

1.Netty的两大性能优化工具 (1)FastThreadLocal FastThreadLocal的作用与ThreadLocal相当&#xff0c;但比ThreadLocal更快。ThreadLocal的作用是多线程访问同一变量时能够通过线程本地化的方式避免多线程竞争、实现线程隔离。 Netty的FastThreadLocal重新实现了JDK的ThreadLoc…

Linux网络设备分析

🐧 Linux 网络设备驱动深入分析 本文将详细分析 Linux 网络设备驱动的工作原理、实现机制和代码框架,并通过一个虚拟网卡实例展示其实现,最后介绍常用的工具和调试手段。 1️⃣ Linux 网络设备驱动概述 Linux 网络设备驱动是内核中负责管理网络硬件(如以太网卡、Wi-Fi …

计算机视觉:从 “看见” 到 “理解”,解锁机器感知世界的密码

早上醒来&#xff0c;你拿起手机&#xff0c;人脸识别瞬间解锁屏幕&#xff1b;开车上班时&#xff0c;车载系统通过摄像头实时识别车道线&#xff0c;提醒你不要偏离&#xff1b;去医院做检查&#xff0c;医生用 AI 辅助的医学影像系统快速定位肺部微小结节&#xff1b;逛超市…

深入了解linux系统—— 线程封装

C11线程库 C11也提供了对应的线程库&#xff0c;在头文件<thread>中&#xff1b;C11将其封装成thread类&#xff0c;通过类实例化出对象&#xff0c;调用类内成员方法进行线程控制。 #include <iostream> #include <thread> #include <unistd.h> using…

安全防御-SCDN如何保护网站安全

随着互联网的快速发展&#xff0c;越来越多的企业依赖在线服务来运行其核心业务。与此同时&#xff0c;网络攻击的频率和复杂性也在不断增加&#xff0c;恶意流量成为许多企业头疼的问题。为了有效地提高网站的安全性和稳定性&#xff0c;德迅云安全加速SCDN被许多用户关注。今…

运筹优化(OR)-在机器学习(ML)浪潮中何去何从?

在如今机器学习的浪潮中&#xff0c;机器学习相关的岗位日益增多&#xff0c;而运筹优化的岗位却相对较少。这是今年我秋招过程中看到的现象。企业越来越希望候选人不仅能建模求解&#xff0c;还能理解如何用数据驱动优化。需要我们有一个完整的技术栈。那么我们就来看看OR与ML…

GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法

GitHub Copilot 在 VS Code 上的终极中文指南&#xff1a;从安装到高阶玩法 前言 GitHub Copilot 作为 AI 编程助手&#xff0c;正在彻底改变开发者的编码体验。本文将针对中文开发者&#xff0c;深度解析如何在 VS Code 中高效使用 Copilot&#xff0c;涵盖基础设置、中文优化…

安全测试、web探测、httpx

&#x1f4a2; 简介 httpx 是一个快速且多用途的HTTP工具包&#xff0c;允许使用retryablehttp库运行多个探测器。它旨在通过增加线程数量来保持结果的可靠性。 功能 &#x1f92a; 发送 GET、POST、PUT、DELETE 等 HTTP 请求支持流式传输支持重定向支持身份验证支持代理支持 …

CNN 中 3×3 卷积核等设计背后的底层逻辑

为什么卷积核爱用 33&#xff1f;CNN 设计 “约定俗成” 的底层逻辑 做深度学习的同学&#xff0c;对 CNN 里 33 卷积核、最大池化、BN 层这些设计肯定不陌生&#xff0c;但你有没有想过&#xff1a;为啥卷积核总选 33&#xff1f;池化层为啥默认最大池化&#xff1f;BN 层又是…

税务岗位职场能力解析与提升路径规划

税务岗位作为企业运营的核心环节之一&#xff0c;对从业者的专业能力与综合素质要求极高。从基础税务核算到战略税务筹划&#xff0c;职场能力的提升需要系统化的路径规划。以下从核心能力、阶段化提升路径及证书价值三个维度展开分析。核心能力体系构建专业税务能力是基础&…

MySQL 索引:结构、对比与操作实践指南

MySQL系列 文章目录MySQL系列前言案例一、认识MySQL与磁盘1.1 MySQL与存储1.2 MySQL 与磁盘交互基本单位二、 MySQL 数据交互核心&#xff1a;BufferPool 与 IO 优化机制三、索引的理解3.1 测试案例3.2 page3.3 页目录3.3 对比其他结构四、聚簇索引 VS 非聚簇索引五、索引操作5…

GitHub 热榜项目 - 日榜(2025-08-24)

GitHub 热榜项目 - 日榜(2025-08-24) 生成于&#xff1a;2025-08-24 统计摘要 共发现热门项目&#xff1a;20 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术热点&#xff1a;1&#xff09;AI应用爆发式创新&#xff0c;包括神经拟真伴侣&#…

纯净Win11游戏系统|24H2专业工作站版,预装运行库,无捆绑,开机快,游戏兼容性超强!

哈喽&#xff0c;大家好&#xff01; 今天给大家带来一款 Windows 11 游戏版本系统镜像&#xff0c;软件已放在文章末尾&#xff0c;记得获取。 一、软件获取与启动 解压后双击exe即可直接运行&#xff0c;无需额外安装。首次启动界面简洁&#xff0c;引导清晰。 二、系统选…

CI/CD 学习之路

目录 简介&#xff1a; 1、工具介绍&#xff1a; 2、搭建jenkins 1&#xff09;创建一个文件Dockerfile&#xff0c;文件无后缀&#xff0c;写入以下代码 2&#xff09;在Dockerfile文件所在目录执行&#xff08;my-jenkins-android 未自定义镜像名称&#xff09; 3&#xf…

马斯克宣布开源Grok 2.5:非商业许可引争议,模型需8×40GB GPU运行,Grok 3半年后开源

昨晚&#xff0c;马斯克在 X 平台连续发布多条消息&#xff0c;宣布其人工智能公司 xAI 已正式开源 Grok 2.5 模型。这款模型是 xAI 在 2024 年的主力模型&#xff0c;如今完全向公众开放。与此同时&#xff0c;马斯克还预告了下一代模型 Grok 3 的开源计划&#xff0c;预计将在…

DMP-Net:面向脑组织术中成像的深度语义先验压缩光谱重建方法|文献速递-深度学习人工智能医疗图像

Title题目DMP-Net: Deep semantic prior compressed spectral reconstruction methodtowards intraoperative imaging of brain tissueDMP-Net&#xff1a;面向脑组织术中成像的深度语义先验压缩光谱重建方法01文献速递介绍脑肿瘤可分为原发性和继发性两类。原发性脑肿瘤多发生…

【nl2sql综述】2025最新综述解读

论文地址&#xff1a;https://arxiv.org/pdf/2408.05109 解读&#xff1a;迈向数据民主化——大型语言模型时代下的Text-to-SQL技术综述 近期&#xff0c;一篇名为《A Survey of Text-to-SQL in the Era of LLMs》的综述论文系统性地梳理了自然语言到SQL查询&#xff08;Text-t…