Ubuntu 安装 OpenCV (C++)

版本详情:

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.rhkb.cn/news/21534.html

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

相关文章

【AI工具之Deepseek+Kimi一键免费生成PPT】

1.打开Deepseek网页&#xff1a;DeepSeek 2.使用Deepseek获得一份PPT大纲&#xff08;输入背景需求约束条件进行提问&#xff09;如下图&#xff1a; 3.复制Deepseek输出的PPT大纲 4.打开Kimi网页&#xff1a;Kimi.ai - 会推理解析&#xff0c;能深度思考的AI助手 5.在Kimi中…

flutter在安卓模拟器上运行

目录 下载android studio&#xff0c;然后把其中的模拟器设为环境变量&#xff0c;然后在vscode/cursor中使用插件&#xff0c;打开安卓模拟器一、下载android studio网址mac 下载64位 ARM 二、启动android studio三、设置SDK四、打开文件 打开模拟器五、运行程序六、在vscode/…

POI pptx转图片

前言 ppt页面预览一直是个问题&#xff0c;office本身虽然有预览功能但是收费&#xff0c;一些开源的项目的预览又不太好用&#xff0c;例如开源的&#xff1a;kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老&#xff0c;使用版本较旧 <dependency><gro…

数仓搭建(hive):DWB层(基础数据层)

维度退化: 通过减少表的数量和提高数据的冗余来优化查询性能。 在维度退化中&#xff0c;相关的维度数据被合并到一个宽表中&#xff0c;减少了查询时需要进行的表连接操作。例如&#xff0c;在销售数据仓库中&#xff0c;客户信息、产品信息和时间信息等维度可能会被合并到一…

vue3 在element-plus表格使用render-header

在vue2中 element表格render-header 源码是有返回h()函数的 在vue3 element-plus 表格源码 render-header函数没有返回h函数了 所以需要用render-header方法中创建虚拟DOM节点的话需要引用h方法 <el-table-column header-align"right" align"right" …

前端带样式导出excel表格,html表格生成带样式的excel表格

众所周知&#xff0c;前端生成表格通常是用xlsx、excel.js等js库&#xff0c;但这些库想要生成时增加excel样式会很麻烦。 有这么一个js库把html表格连样式带数据一并导出为excel表格: html-table-to-excel npm install html-table-to-excel 使用 html表格&#xff1a; <…

ASP.NET JWT认证失败响应:从默认到自定义的优雅改造

本文主要介绍如何通过ASP.NET Core的JwtBearerEvents机制&#xff0c;实现JWT认证失败响应的深度定制。 1. 背景 在之前的文章《一个简单的ASP.NET一致性返回工具库》 中&#xff0c;我们介绍了 Sang.AspNetCore.CommonLibraries 这一通用库&#xff0c;它通过统一API响应模型…

AI工作流+专业知识库+系统API的全流程任务自动化

我有点悲观&#xff0c;甚至很沮丧&#xff0c;因为AI留给普通人的机会不多了&#xff0c;这既是人类之间权力的斗争&#xff0c;也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势&#xff0c;如果人类不能平权&#xff0c;那就只能跪下接受审判。 通过整合AI工作流、专…

安卓burp抓包,bypass ssl pinning

好久好久没有发东西了。主要是懒。。。 这几天在搞apk渗透&#xff0c;遇到了burp无法抓包问题&#xff0c;觉得可以写下来。 问题描述 1. 一台安卓手机&#xff0c;装了面具&#xff0c;可以拿到root 2. 电脑上有burp&#xff0c;设置代理 3.手机和电脑连同一个网段&…

TS语言自定义脚手架

初始化 新建文件夹初始化命令 npm init -ytsc --initnpm i types/nodenpm i typescript# 处理别名npm i -D tsc-alias -y 表示选项都为yes 安装ts相关依赖 新建相关文件 bin 文件夹 src文件夹 commands 文件夹 &#xff08;命令 utils 文件夹 (封装方法&#xff09; index.t…

ETL工具: Kettle入门(示例从oracle到oracle的数据导入)

kettle介绍 ETL工具,用于对数据的抽取&#xff08;Extract), 转换(Transform),加载 (Load&#xff09; Kettle 是一种ETL工具, 现称为 Pentaho Data Integration (PDI) 特点:纯JAVA语言编写 官方学习文档 网站: https://docs.hitachivantara.com/r/en-us/pentaho-data-int…

一周学会Flask3 Python Web开发-response响应格式

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在HTTP响应中&#xff0c;数据可以通过多种格式传输。大多数情况下&#xff0c;我们会使用HTML格式&#xff0c;这也是Flask中…

内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%

一、背景与痛点 在内外网隔离的企业网络环境中&#xff0c;员工与外部协作伙伴&#xff08;如钉钉用户&#xff09;的文件传输面临以下挑战&#xff1a; 1. **安全性风险**&#xff1a;内外网直连可能导致病毒传播、数据泄露。 2. **操作繁琐**&#xff1a;传统方式需频繁切…

【数据结构-红黑树】

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

Jetpack Architecture系列教程之(三)——ViewModel控制器

目录 介绍 如何使用 添加依赖 构建ViewModel 分析ViewModel ViewModel生命周期 ViewModel加载原理 介绍 ViewModel 的出现是为了解决数据因Android UI控制器在生命周期活动中造成数据丢失的问题。 在一般情况下&#xff0c;页面数据丢失&#xff08;转屏、闪退等生命周期…

Vue3.5 企业级管理系统实战(七):Sidebar组件开发 1

现在开始&#xff0c;我们要进行 Sidebar 组件的开发&#xff0c;篇幅和时间原因&#xff0c;本篇先探讨 el-menu 的配置。 1 菜单样式设置 在 src/style/variables.module.scss 中&#xff0c;我们设置菜单样式相关的变量&#xff0c;这些变量将用于后续组件的样式配置。 /…

LeetCode:2595.奇偶位数

给你一个 正 整数 n 。用 even 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的偶数下标的个数。用 odd 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的奇数下标的个数。请注意&#xff0c;在数字的二进制表示中&#xff0c;…

【算法精练】背包问题(01背包问题)

目录 1. 背包问题 2. 01背包问题 3. 优化 总结 1. 背包问题 经典的背包问题&#xff1a; 有一个背包&#xff0c;限制背包的体积&#xff1b;有一堆物品&#xff0c;从这堆物品中选择&#xff0c;在不超过背包容量的前提下&#xff0c;选出最大价值的物品&#xff1b; 从这个…

ubuntu 执行 sudo apt-get update 报错

记录一下&#xff0c;遇到这个问题了&#xff0c;网络上看到的解决办法&#xff0c;亲测有效 执行sudo apt-get update ,却报以下错误&#xff0c;“SECURITY: URL redirect target contains control characters rejecting ” 经检查发现&#xff0c;/etc/apt/source.list 下的…

如何调用 DeepSeek API:详细教程与示例

目录 一、准备工作 二、DeepSeek API 调用步骤 1. 选择 API 端点 2. 构建 API 请求 3. 发送请求并处理响应 三、Python 示例&#xff1a;调用 DeepSeek API 1. 安装依赖 2. 编写代码 3. 运行代码 四、常见问题及解决方法 1. API 调用返回 401 错误 2. API 调用返回…