Ubuntu 安装 OpenCV (C++)

news2025/3/31 19:56:46

版本详情:

Ubuntu: 22.04 + 5.15.0-133-generic

gcc: 11.4.0

g++: 11.4.0

OpenCV: 4.7.0

1. 卸载 OpenCV

进入原先编译 opencv 的 build 目录,在该目录下打开终端,执行以下代码(如果 build 已经删除了,可以重新编译一遍该版本的 opencv,然后在最后一步执行 sudo make uninstall)

sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv4 /usr/local/include/opencv3 /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv4 /usr/include/opencv3 /usr/include/opencv2  /usr/include/opencv /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

执行代码后可能会报错,忽略掉

sudo apt-get --purge remove opencv-doc opencv-data python-opencv
sudo apt-get autoremove opencv-doc opencv-data libopencv-dev libopencv2.4-java libopencv2.4-jni python-opencv libopencv-core2.4 libopencv-gpu2.4 libopencv-ts2.4 libopencv-photo2.4 libopencv-contrib2.4 libopencv-imgproc2.4 libopencv-superres2.4 libopencv-stitching2.4 libopencv-ocl2.4 libopencv-legacy2.4 libopencv-ml2.4 libopencv-video2.4 libopencv-videostab2.4 libopencv-objdetect2.4 libopencv-calib3d2.4
pkg-config opencv --libs pkg-config opencv --modversion

执行完以上步骤,一般就可以完全卸载OpenCV

2. 安装 OpenCV

(1) 更新软件包和安装工具

sudo apt update
sudo apt install -y cmake g++ wget unzip

(2) 安装必要的依赖项

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

(3) 下载 OpenCV

前往 OpenCV 官网,选择你需要的版本进行下载。通常,下载页面会提供不同格式的包,如源代码包(Sources)和预编译包(Pre-built binaries)等。也可以如下通过命令下载。

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.7.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.7.0.zip
unzip opencv.zip
unzip opencv_contrib.zip

如果不需要 opencv_contrib 则不需要下载

(4) 创建路径

mkdir opencv
mv -r ./opencv-4.7.0 ./opencv
mv -r ./opencv_contrib-4.7.0 ./opencv
cd opencv
mkdir build
cd build

如果不需要 opencv_contrib 则不需要移动

(5) 配置 CMake

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.7.0/modules/ ../opencv-4.7.0

注意最后两条的路径配置要正确。如果不需要 opencv_contrib 则不需要 -DOPENCV_EXTRA_MODULES_PATH。这里 -D CMAKE_BUILD_TYPE=Release 指定了构建类型为 Release(优化版本),-D CMAKE_INSTALL_PREFIX=/usr/local 指定了安装前缀为 /usr/local。

此外,据说还要增加 -DOPENCV_GENERATE_PKGCONFIG=ON,这是为了在 /usr/loacl/lib/pkgconfig/ 目录下自动生成 opencv4.pc 文件。这个可能是与下面 环境配置 一起构成 pkgconfig 的配置,如此可以完成下面 pkg 的 g++ 调用方式。

(6) 编译和安装

sudo make -j$(nproc)
sudo make install

(7) 测试

opencv_version
4.7.0

# pkg-config opencv --modversion # 4版本以下

3. 配置环境

实测不需要下面的环境配置,OpenCV 依然可以使用,但大部分教程都有下面的环境配置环节,所以这里也记录了环境配置过程

(1) 配置库文件

在 /etc/ld.so.conf.d/ 加入对于库的 .conf 文件,首先新建 opencv.conf

sudo vim /etc/ld.so.conf.d/opencv.conf

打开文件之后输入(可能是个空文件,没关系)

/usr/local/lib

输入以下代码,将 /etc/ld.so.conf.d 中的数据读入缓存

sudo ldconfig

(2) 配置环境变量

添加 pkg-config 环境变量,打开文件之后输入路径

sudo vim ~/.bashrc

把这个路径添加在文件最后(如果不是/usr/local路径下,则改成自己的路径)

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

更新环境变量

source ~/.bashrc

以上所有命令的具体含义和解释可以参考最后参考链接 1。

完成 OpenCV 安装后,如果空间不够,完全可以删除上面的 opencv 文件夹,以及两个 zip 文件。

4. 编译 OpenCV 程序

安装完成后,可以发现 OpenCV 被安装到 /usr/local/include/opencv4 

(1) g++ 编译

必须加上后面这一长串,否则找不到头文件或者库文件

g++ your_program.cpp -o your_program -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs

#
这里
-I/usr/local/include/opencv4指定了头文件搜索路径,
-L/usr/local/lib指定了库文件搜索路径,
-lopencv_...指定了要链接的库。
#

或者使用如下命令,上面 配置环境 那一步可能会影响到下面这一命令,未测试。

g++ `pkg-config opencv --cflags` your_program.cpp -o your_program `pkg-config opencv --libs`

(2) CMakeList 编译

路径结构

inculde 语句

#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;  //OpenCV 的命名空间

编译命令

mkdir build
cd build/
cmake ..
make

CMakeList.txt 文件如下,其中 AVM2D 是我的源文件名。

# cmake needs this line
cmake_minimum_required(VERSION 3.1)

# Define project name
project(AVM2D_project)

# 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}")

# Declare the executable target built from your sources
add_executable(AVM2D AVM2D.cpp)

# Link your application with OpenCV libraries
target_link_libraries(AVM2D PRIVATE ${OpenCV_LIBS})

关于 OpenCV 下 CMakeList.txt 的使用方式参考如下链接 4。通过 set() 命令可以指定 OpenCV 包的搜索路径。

参考链接:

1. ubuntu opencv 安装

2. OpenCV安装(Ubuntu)

3. 04【安装】【避坑指南】Ubuntu中安装OpenCV

4. opencv在 Cmakelist的写法以及编译详解

5. Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake

6. opencl 安装centos linux安装opencv4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2300094.html

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

相关文章

前端模板引擎

前言 正常渲染拿到数据后渲染&#xff0c;三步走&#xff1a;格式化数据、编译模板、渲染数据 如下例 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

长尾词SEO优化软件:企业官网流量提升的软件【实测】

搜索引擎流量中68%来自长尾关键词&#xff08;数据来源&#xff1a;Ahrefs 2025&#xff09;&#xff0c;但83%企业仍困于「高价值长尾词难挖掘内容生产跟不上」的双重困境。当同行用智能工具批量布局「孕妇防辐射服哪个牌子好」等精准词时&#xff0c;手动分析数据的你可能还在…

用自己的数据训练yolov11目标检测

文章目录 概要理论知识整体架构流程架构优化多任务支持多参数体量 操作实操环境配置数据准备数据标注数据放置路径 训练预测 概要 YOLOv11 是 Ultralytics 团队于 2024 年 9 月 30 日发布的最新目标检测模型&#xff0c;延续了 YOLO 系列实时推理特性&#xff0c;同时通过架构优…

gsoap实现webservice服务

gsoap实现webservice服务 在实现Web服务时&#xff0c;使用gSOAP是一个很好的选择&#xff0c;因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库&#xff0c;它支持SOAP协议的各种版本&#xff0c;包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…

项目2 数据可视化--- 第十五章 生成数据

数据分析是使用代码来探索数据内的规律和关联。 数据可视化是通过可视化表示来 探索和呈现数据集内的规律。 好的数据可视化&#xff0c;可以发现数据集中未知的规律和意义。 一个流行的工具是Matplotlib&#xff0c;他是一个数据绘图库&#xff1b; 还有Plotly包&#xff…

QT (四)模型/视图 QFileSystemModel,QStringListModel,QStandardItemModel

思考&#xff1a;QTableWidget 在某种程度上可以等价为QStandardItemModel&#xff0c;同理&#xff0c;其他的功能也有类似的等价&#xff0c;但是以当前的QTableWidget 和QStandardItemModel为例的话&#xff0c;两者都是用于实现建立表格的相关组件&#xff0c;只不过QStand…

. Unable to find a @SpringBootConfiguration(默认软件包中的 Spring Boot 应用程序)

解决&#xff1a; 新建一个包即可 问题&#xff1a; 默认软件包中的 Spring Boot 应用程序。 原因&#xff1a; 默认包的定义 &#xff1a; 如果一个 Java 类没有使用 package 声明包名&#xff0c;则该类会被放置在默认包中。Spring Boot 遵循 Java 的包管理约定&#xff…

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置&#xff1a;2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

【MyBatis】预编译SQL与即时SQL

目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…

Python数据可视化 - Matplotlib教程

文章目录 前言一、Matplotlib简介及安装1. Matplotlib简介2. 安装Matplotlib 二、Matplotlib Pyplot1. Pyplot介绍2. Pyplot中方法介绍2.1 创建和管理图形2.2 绘制图形2.3 设置图形属性2.4 保存和展示 三、Matplotlib绘图标记1. 介绍2. 基本用法3. 标记大小与颜色4. 标记样式列…

DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决

我的个人主页 我的专栏&#xff1a;人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 一、引言 在机器学习的广袤天地中&#xff0c;大型语言模型&#xff08;LLM&#xff09;无疑是最…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

STM32 Flash详解教程文章

目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易&#xff0c;请勿搬运&#xff0c;感谢理解&#xff01;&#xff01;&#xff01; Flash基本概念…

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程&#xff08;Pandavan&#xff09; 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而&#xff0c;原厂固件的功能相对有限&#xff0c;难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能&#xff0c;还能通过第三方固…

红队视角出发的k8s敏感信息收集——Kubernetes API 扩展与未授权访问

针对 Kubernetes API 扩展与未授权访问 的详细攻击视角分析&#xff0c;聚焦 Custom Resource Definitions (CRD) 和 Aggregated API Servers 的潜在攻击面及利用方法&#xff1a; ​ 攻击链示例 1. 攻击者通过 ServiceAccount Token 访问集群 → 2. 枚举 CRD 发现数据库配…

11. Docker 微服务实战(将项目打包生成镜像,在 Docker 当中作为容器实例运行)

11. Docker 微服务实战(将项目打包生成镜像&#xff0c;在 Docker 当中作为容器实例运行) 文章目录 11. Docker 微服务实战(将项目打包生成镜像&#xff0c;在 Docker 当中作为容器实例运行)2. 最后&#xff1a; 建 Module - docker_boot 编辑 pom <?xml version"1.0&…

计算机视觉:卷积神经网络(CNN)基本概念(二)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 接上一篇《计算机视觉&am…

【数据结构-红黑树】

文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉查找树&#xff08;Binary Search Tree, BST&#xff09;&…

dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型

要将 dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型. 申请阿里云百练的KEY 添加模型 测试模型

应用分层、三层架构和MVC架构

前言 在前面中&#xff0c;我们已经学习了Spring MVC 的一些基础操作&#xff0c;那么后面就用一些简单的案例来巩固一下。 在开始学习做案例之前&#xff0c;我们先来了解一下在软件开发中常见的设计模式和架构。 应用分层 含义 应用分层是一种软件开发设计思想&#xff0…