【Linux】编译安装 opencv 并链接到 VSCode

一、背景

        最近打算把现有的一个 python 程序用 c++ 重写,进一步提升性能。编辑器使用 VSCode,三方库需要用到 opencv,要进行编译安装。

二、编译安装 opencv

1. 更新源

sudo apt update && sudo apt upgrade

2. 安装依赖库

安装编译 opencv 所需的依赖库

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran

如果安装失败,需要更换 apt 源,比如阿里源,老生常谈的问题了。

3. 安装 opencv 

3.1 下载源码包

从 github 下载 opencv 和 opencv-contrib 源码包,本人用的版本是 4.9.0,下载完成后解压

 3.2 编译安装

首先在当前目录下新建 build 文件夹

cd opencv-4.9.0
mkdir build && cd build

使用如下命令生成编译配置文件

cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 \-D OPENCV_EXTRA_MODULES_PATH=/home/rockchip/opencv_contrib-4.9.0/modules/ \-D OPENCV_GENERATE_PKGCONFIG=YES \-D ENABLE_PRECOMPILED_HEADERS=OFF ..

        由于添加了 opencv 扩展库,cmake 过程中会下载一些模型和文件,比如微信二维码识别(4.5.2 之后新增模块)模型和人脸检测模型,在不挂代理的情况下会等待很长一段时间尝试下载并最终提示下载失败。实测在使用代理时,wechat_qrcode 模块需要的模型文件和 xfeatures2d 模块需要的 .i 文件可以正常下载,但 face 模块需要的 face_landmark_model.dat 文件始终无法下载成功。如果实际程序中用不到自带的人脸检测模块,可以找到该模块的 CMakeLists.txt 文件,将下载相关代码注释掉,确保 cmake 流程可以正常进行。

cd /home/rockchip/opencv_contrib-4.9.0/modules/face

在该目录下打开 CMakeLists.txt,注释掉 13-27 行。 

        如果需要用到该模型又无法使用代理,可以手动下载该文件,然后将其放到 opencv-4.9.0/.cache/data 目录下,并重命名为 "7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat",即可。

        至于 qrcode 模型和 xfeatures2d 用到的 .i 文件,文件太多就不一一放链接了,.i 文件可以在这位大佬的 github 上下载,qrcode 模型网上搜一下就能下载。下载完后分别放到这两个目录下

# qrcode 模型存放目录

/path/to/opencv_contrib-4.9.0/modules/wechat_qrcode/downloads/wechat_qrcode

# .i 文件存放目录

/path/to/opencv_contrib-4.9.0/modules/xfeatures2d/src

之后可以开始编译安装了

make -j4 && sudo make install

大概等待几十分钟就可以安装完成了。

3.3 配置环境变量

打开 bashrc 文件

sudo vi ~/.bashrc

文件末尾添加环境变量,保证程序编译时能正确找到 opencv 库

export PATH=/usr/local/opencv4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/opencv4/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=/usr/local/opencv4/include:$CPLUS_INCLUDE_PATH
export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH

注意:如果在 lib 目录下找不到 pkgconfig,说明 cmake 配置时没有开启 OPENCV_GENERATE_PKGCONFIG,opencv4.x 默认关闭该选项,需要手动开启。

更新生效

source /etc/bash.bashrc

验证

pkg-config --modversion opencv4

输出版本号 

3.4 配置动态链接库

创建配置文件

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

添加如下内容,注意前缀路径要与 cmake 编译选项中的 CMAKE_INSTALL_PREFIX 的路径设置保持一致

/usr/local/lib/opencv4

更新文件使其生效

sudo ldconfig
3.5 测试demo

对官方提供的测试 demo 稍作修改,输出一张图片

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>using namespace cv;
using namespace std;void drawText(Mat & image);int main()
{cout << "Built with OpenCV " << CV_VERSION << endl;Mat image;cout << "No capture" << endl;image = Mat::zeros(480, 640, CV_8UC1);drawText(image);imshow("Sample", image);waitKey(0);return 0;
}void drawText(Mat & image)
{putText(image, "Hello OpenCV",Point(20, 50),FONT_HERSHEY_COMPLEX, 1, // font face and scaleScalar(255, 255, 255), // white1, LINE_AA); // line thickness and type
}

编译,运行

g++ example.cpp $(pkg-config --cflags --libs opencv) -o test
./test

输出图片

到这一步 opencv 就可以正常使用了。 

三、VSCode 加载 opencv

使用VSCode打开程序时会显示找不到 opencv

Ctrl+Shift+P,选择 C/C++: 编辑配置(UI),此时会在当前项目的 .vscode 文件夹中生成c_cpp_properties.json 文件,在 includePath 中添加 opencv 头文件所在位置

此时红色波浪线消失,可以正确加载 opencv了。 

四、总结

        本文主要记录一下如何编译安装opencv并用VSCode调用,主要的坑还是在编译部分,如果编译没有问题后面就比较顺了。

参考资料 

[1]  #include <opencv2/opencv.hpp>报错没有该文件夹,linux上面安装opencv-CSDN博客

[2] 详尽指南:在 Ubuntu 20.04 中源码编译安装 OpenCV 并进行全面配置,包括多版本共存与切换_ubuntu 20.04 编译opencv-CSDN博客 [3] 为什么OpenCV4 “pkg-config --modversion opencv”显示“ No package ‘opencv‘ found”?解决方法!_no package 'opencv' found-CSDN博客

[4] 解决opencv在vs code中头文件找不到的问题_vscode opencv 找不到头文件-CSDN博客 

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

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

相关文章

Ubuntu 安装 HAProxy

HAProxy 是什么 HAProxy&#xff08;High Availability Proxy&#xff09; 是一个 高性能、高可用的 TCP 和 HTTP 负载均衡器与代理服务器。 HAProxy 的特点 特性说明支持协议HTTP、HTTPS、TCP高性能使用 C 语言编写&#xff0c;性能极高高可用与 Keepalived 配合可实现主备健…

Mysql--基础知识点--91.2--processlist

在 MySQL 中&#xff0c;SHOW PROCESSLIST 是一个常用命令&#xff0c;用于查看当前数据库服务器上所有正在运行的线程&#xff08;进程&#xff09;信息。以下是关键点说明&#xff1a; 1. 命令用法 SHOW FULL PROCESSLIST;输出字段&#xff1a; 列名含义Id线程唯一标识符&am…

Git标签删除脚本解析与实践:轻松管理本地与远程标签

Git 标签删除脚本解析与实践:轻松管理本地与远程标签 在 Git 版本控制系统中,标签常用于标记重要的版本节点,方便追溯和管理项目的不同阶段。随着项目的推进,一些旧标签可能不再需要,此时就需要对它们进行清理。本文将通过一个完整的脚本,详细介绍如何删除本地和远程的 …

K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战

引言 在 Kubernetes 环境中&#xff0c;容器镜像的存储与管理至关重要。企业级镜像仓库&#xff08;如 Harbor&#xff09;为团队提供了安全、稳定、可扩展的镜像管理解决方案。 一、Harbor 安装与配置 Harbor 是由 VMware 开源的企业级云原生镜像仓库&#xff0c;它不仅支持…

2025年best好用的3dsmax插件和脚本

copitor 可以从一个3dsmax场景里将物体直接复制到另一个场景中 Move to surface 这个插件可以将一些物体放到一个平面上 instancer 实体器&#xff0c;举例&#xff1a;场景中有若干独立的光源&#xff0c;不是实体对象&#xff0c;我们可以使用instancer将他变成实体。 paste …

Python爬虫实战:研究nodejs aes加密

1. 引言 1.1 研究背景与意义 在当今数字化时代,Web 数据的价值日益凸显。通过爬虫技术获取公开数据并进行分析,能够为企业决策、学术研究等提供有力支持。然而,为了保护数据安全和隐私,许多网站采用了加密技术对数据进行保护,其中 AES 加密是一种常见且安全的加密算法。…

LGDRL:基于大型语言模型的深度强化学习在自动驾驶决策中的应用

《Large Language Model guided Deep Reinforcement Learning for Decision Making in Autonomous Driving》2024年12月发表&#xff0c;来自北理工的论文。 深度强化学习&#xff08;DRL&#xff09;在自动驾驶决策方面显示出巨大的潜力。然而&#xff0c;由于DRL的学习效率低…

TDEngine 与 Grafana

目录 实践目录 Grafana 参考文档 实践目录 10.60.100.194&#xff1a;/home/dualven/tdengine Grafana systemctl status grafana-server http://10.60.100.194:3000/ 这个端口与mydoor的new server服务冲突 &#xff08;同时只开一个&#xff09; 参考文档 运行监…

Edge浏览器打开PDF文件显示空白(每次需要等上一会)

概述 部分pdf文件用edge浏览器打开显示空白&#xff0c;需要等一会才能显示出来&#xff0c;这很让人难以接受&#xff0c;用其他浏览器和pdf阅读器打开是正常的&#xff0c;该怎么操作解决&#xff0c;卸载重装&#xff0c;修复&#xff0c;重置浏览器等都无效。 解决办法 可…

uniapp小程序轮播图高度自适应优化详解

在微信小程序开发过程中&#xff0c;轮播图组件(swiper)是常用的UI元素&#xff0c;但在实际应用中经常遇到高度不匹配导致的空白问题。本文详细记录了一次轮播图高度优化的完整过程&#xff0c;特别是针对固定宽高比图片的精确适配方案。 问题背景 在开发"零工市场&quo…

Android第三次面试总结之网络篇补充

一、网络模型&#xff1a;OSI 七层 vs TCP/IP 四层&#xff08;必考点&#xff09; 1. 分层模型对比 OSI 七层模型TCP/IP 四层模型核心功能Android 相关场景应用层&#xff08;7 层&#xff09;应用层定义数据格式&#xff08;HTTP/HTTPS/FTP/API&#xff09;OkHttp/Retrofit…

postgresql主从集群一键搭建脚本分享

脚本1&#xff1a; cat pg_ms_install.sh #!/bin/bash # 基础环境配置&#xff08;保持不变&#xff09; setenforce 0 >/dev/null 2>&1 || true sed -i "s/SELINUXenforcing/SELINUXdisabled/" /etc/selinux/config systemctl stop firewalld >/dev/n…

LWIP的ICMP协议

ICMP协议简介 ICMP协议是一个网络层协议 背景&#xff1a;如果丢包了&#xff0c;IP协议并不能通知传输层是否丢包以及丢包的原因。因此我们需要ICMP协议来完成这样的功能 为什么需要ICMP协议 1&#xff0c;IP 协议本身不提供差错报告和差错控制机制来保证数据报递交的有效…

具身智能机器人开源陪跑计划(机器人实战落地)

Who&#xff1a;我们是谁&#xff1f; 主理人背景 华南理工大学硕士毕业&#xff0c;10年机器人研发经验&#xff0c;5年“互联网机器人”创业经历 累计牵头落地的机器人30多款&#xff0c;累计授权专利80余项&#xff0c;累计论文发表10余篇。 技术履历 C#、Sql server、SPSS…

Dify 配置网络爬虫为知识库数据来源 (以Jina Reader为例) - 随笔

API获取 进入官网获取免费的API密钥 官网链接&#xff1a;https://jina.ai/reader/ 点击“<> API”按钮 点击复制文本框中的API Key&#xff1a; 进入Dify的知识库页面 → 选择“同步自Web站点” → 选择“Jina Reader” → 点击“配置”按钮 选择数据来源为Jina …

基于网络爬虫+Spark+Hadoop等大数据和SpringBoot技术实现的的汽车行业大数据分析与可视化平台系统(源码+论文+PPT+部署文档教程等)

博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围…

React学习路线图-Gemini版

前端开发学习路线图 (针对编程新手&#xff0c;主攻 React 框架) 总原则&#xff1a;先打好地基&#xff0c;再盖楼。 无论学习哪个框架&#xff0c;扎实的 HTML、CSS 和 JavaScript 基础是成功的关键。React 是基于 JavaScript 构建的&#xff0c;所以深入理解 JS 至关重要。…

空间计算:开启人机交互新纪元的下一代技术范式

引言 当苹果CEO蒂姆库克在2023年WWDC大会上宣布Apple Vision Pro将引领“空间计算时代”时&#xff0c;这一宣言不仅标志着技术范式的迭代&#xff0c;更预示着一场融合虚实世界的革命已悄然来临。 空间计算&#xff08;Spatial Computing&#xff09;作为连接物理世界与数字…

大语言模型训练的两个阶段

先说结论&#xff1a;第一阶段在云平台训练至收敛 第二阶段本地GPU微调 一、阶段划分的核心逻辑 阶段目标资源特点典型耗时占比成本敏感度预训练获取通用表征能力需要大规模分布式计算70-90%高&#xff08;追求每美元算力&#xff09;微调适配特定任务需要领域数据安全/低延迟…

【AI News | 20250512】每日AI进展

AI Repos 1、UI-TARS UI-TARS-1.5 是字节跳动开源的多模态智能体&#xff0c;基于强大的视觉语言模型构建&#xff0c;通过强化学习实现高级推理&#xff0c;显著提升了在虚拟世界中执行多样化任务的能力和适应性。相较前期模型&#xff0c;1.5 版本在 OSWorld、Windows Agent…