首页 > 系统相关 >Ubuntu16.04 opencv环境搭建(C++)

Ubuntu16.04 opencv环境搭建(C++)

时间:2024-05-25 22:30:23浏览次数:30  
标签:Ubuntu16.04 编译 C++ pc opencv 文件 OpenCV pkg

Ubuntu下vscode跑opencv程序环境搭建。

目录

1 ubuntu查看opencv版本

2 下载opencv包

3 依赖配置

4 进入安装包内执行

5 配置环境变量

6 VScode配置-下载c++扩展

7 编译运行helloworld

8 在vscode中配置opencv环境

9 运行结果


1 ubuntu查看opencv版本

pkg-config --modversion opencv

2 下载opencv包

 官网下载地址:https://opencv.org/releases/

3 依赖配置

sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libvtk7-dev libjpeg-dev libtiff5-dev libopenexr-dev libtbb-dev

4 进入安装包内执行

mkdir build
cd build
cmake 
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.5.1 ..
make -j4
sudo make install

执行结果:

5 配置环境变量

gedit ~/.bashrc

加入:

#opencv4.8.1
export PKG_CONFIG_PATH=/usr/local/opencv4.8.1/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv4.8.1/lib

后执行

source ~/.bashrc

6 VScode配置-下载c++扩展

7 编译运行helloworld

在vscode中创建c++文件,helloworld,在编译运行后将自动生成json文件,要运行opencv,需要修改这几个json文件。他们的作用是类似于形成

g++ -std=c++11 main.cpp -o main `pkg-config --cflags --libs opencv`

的编译命令。

8 在vscode中配置opencv环境

需要引入opencv库到编译环境中,修改位置:

c_cpp_properties.json中:

加入安装opencv库的位置。

task.json中:

加入库的链接。上面这行等同于分别链接下面这些库,因为有.pc文件。

gemini对pc文件的介绍:

`pc` 文件(pkg-config 文件)在引入三方库时扮演着至关重要的角色,它提供了有关库的信息,以便编译器和链接器可以找到并正确使用它。

`.pc` 文件通常包含以下信息:

- 库的名称和版本
- 库的描述
- 库的头文件和库文件的位置
- 库的依赖关系(其他必需的库)
- 库的编译和链接标志

当您使用 `pkg-config` 命令时,它会读取 `.pc` 文件并提取这些信息,然后将其传递给编译器和链接器。这简化了库的编译和链接过程,因为您不必手动指定所有这些信息。

例如,如果您要使用 OpenCV 库,您可以使用以下命令:


  g++ -std=c++11 main.cpp `pkg-config --cflags --libs opencv`

`pkg-config` 命令将读取 OpenCV 的 `.pc` 文件并提取编译和链接 OpenCV 所需的所有信息。然后,它会将这些信息传递给 `g++` 编译器,以便它可以正确编译和链接您的代码。

**注意:**

- `.pc` 文件通常安装在 `/usr/lib/pkgconfig` 目录中。
- 您可以使用 `pkg-config --list-all` 命令查看系统上安装的所有 `.pc` 文件。
- 如果您找不到特定库的 `.pc` 文件,您可能需要手动指定编译和链接标志。

这里可能遇到问题,看起来正常的代码编译报错,是因为vscode没配置c++11。

OpenCV 4.8.1 **不支持** C++98 标准

OpenCV 4.8.1 要求使用 C++11 或更高版本。这是因为 OpenCV 4.8.1 使用了 C++11 中引入的许多特性,例如:

- 智能指针(`std::unique_ptr` 和 `std::shared_ptr`)
- 范围 for 循环
- lambda 表达式

如果您需要在 C++98 上使用 OpenCV,则需要使用较旧的版本,例如 OpenCV 3.4.x。

**注意:**

即使您能够在 C++98 上编译 OpenCV 4.8.1,也可能会遇到运行时错误,因为 OpenCV 4.8.1 依赖于 C++11 的某些特性。

两个方案,用老版本和配置vscode使用c++11编译。

9 运行结果

标签:Ubuntu16.04,编译,C++,pc,opencv,文件,OpenCV,pkg
From: https://blog.csdn.net/hkj887tg/article/details/138484431

相关文章

  • C++初阶学习第九弹——探索STL奥秘(四)——vector的深层挖掘和模拟实现
    string(上):C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类-CSDN博客string(下):C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现-CSDN博客vector(上):C++初阶学习第八弹——探索STL奥秘(三)——深入刨析vector的使用-CSDN博客前言:在前面我们已经学习了string的......
  • C++入门(3) 指针和引用的区别|引用的本质|引用小结|inline函数|缺省函数
    一,引用引用和指针的区别1,从语法规则上讲指针变量存储某个实例(变量或者对象)的地址;引用是某个实例的别名程序为指针变量分配内存空间;不为引用分配内存空间指针变量的值可以改变;引用一旦初始化就无法改变指针变量可以为NULL;但是没有空引用指针作为形参需要判断是否为空;引用......
  • 《拯救大学生课设不挂科第二期之Windows11下安装VC6.0(VC++6.0)与跑通Hello World C语言
    背景与目标人群:大学第一次学C语言的时候,大部分老师会选择VC6这个编辑器。但由于很多人是新手,第一次上大学学C语言。老师要求VC6.0(VC++6.0)写C语言跑程序可能很多人还是第一次接触电脑。需要安装VC6这个编辑器并且编译C语言程序,但是不怎么会装。博主结合自己当时学习与现在......
  • c++实现简单算法【1】
    1.交换两数inta=2,b=3;inttemp=a;a=b;b=a; 函数包装指针#include<stdio.h>#include<string.h>//#include<iostream>//usingnamespacestd;voidswap(int*a,int*b){ inttemp=*a; *a=*b;//修改a指针指向的地址的对应的变量的值,地址不变 *b=temp;}int......
  • c++/c语法基础【2】
    目录1.memset数组批量赋值2.字符数组 ​编辑输入输出: 字符数组直接输入输出%s: gets!string.h 1.strlen:字符串去掉末尾\0的长度......
  • 【每周例题】力扣 C++ 字符串相乘
    字符串相乘题目字符串相乘题目分析1.首先,题目上标出了一条:注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。这就是这道题的难度所在2.这样子的话,我们可以从手写乘法计算来寻找思路: ①首先我们需要将各位相乘的结果放入数组ansArr中,我们使用双重for循环计算......
  • 『C++初阶』第四章--- 模板初级
    1.泛型编程    如何实现一个适合于所有类型的通用的交换函数呢?voidSwap(int&left,int&right){inttemp=left;left=right;right=temp;}voidSwap(double&left,double&right){doubletemp=left;left=right;right=temp;}voidSwap(ch......
  • C++基础知识学习笔记(5)——函数
    学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=95&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3函数函数的默认参数可以为形参提供默认值。intadd(inta,intb=1,intc=2){ returna+b+c;}intmain(){ cout<<(add(1,3,......
  • C++容器之无序集(std::unordered_set)
    目录1概述2使用实例3接口使用3.1construct3.2assigns3.3iterators3.4capacity3.5find3.6count3.7equal_range3.8emplace3.9emplace_hint3.10insert3.11erase3.12clear3.13swap3.14bucket_count3.15max_bucket_count3.16bucket_s......
  • 原始字面常量(C++11)
    原始字面常量(C++11)文章目录原始字面常量(C++11)前言一、原始字面量二、代码示例总结前言字面量一般是指数值(12、454等)和字符串(“Hw”、“h\t”),但是有时候我们想表达字符原始的意义,不想进行转义,比如说"h\t"字符串中‘\t’表达的意思是制表符即进行了转义,C++11添加了......