笔记---Linux安装OpenCV及VSCode的配置编译

2023-11-20

学更好的别人,

做更好的自己。

——《微卡智享》

61c3a4d1bacf5119dea04cd3cd51b62d.png

本文长度为4250,预计阅读10分钟

前言

最近在学点新东西,教程中主要也是在Linux中使用,对于我这个以前从未接触Linux系统的人来说,正好也是个机会掌握下LInux系统。这篇就是记录在Linux下安装OpenCV的笔记。

9a3de1ce7c5bad12ee142506b91c7e93.png

Linux系统

f5873dc2417d5c7c18f1770f49b74c7e.png

微卡智享

其实这个选择也是挺简单的,Ubuntu的相关介绍还是挺多的,于是直接就下载了Ubuntu 20.04.3,装在了虚拟机中,我用的虚拟机是Virtual Box。

692e6f287ae9e8862c907cad7be14370.png

5c2fe3094652706493741884467764f6.png

装好后的是可视化界面,由于不少操作可以使用鼠标操作,所以这两天使用来看,对于我来说比较常用的命令几个是:

--安装软件包
sudo apt install 软件包名称


--删除软软
sudo apt remove 软件名称


--升级软件 
sudo apt upgrade


--修改权限 
sudo chmod 777 文件或文件夹名


--创建文件,这个也不怎么用,主要是装上VSCode后,一般用那上新建了
touch 文件名


--建立链接
ln -s source dist  --软链接
ln source dist --硬链接


--其它的像cd  mkdir ls ll这些查询的命令,在可视化界面下对我来说基本没什么用,如果是只用命令行的话当然要掌握

安装的软件 

1. VSCode

0ccdbf45489d83e67e11f7e756b4a7fa.png

这个没得说,创建文件,C++的编译都用到这个了,一个是轻量,再就是适配的插件是真多。

2.Edge浏览器

0fd1056bfad0fa18b60f9d013b161ea3.png

Windows下用了Edge后就离不开它了,所以Linux也装了一下,原来的FireFox就不用了。

3.Fcitx五笔

53f0931e8bb2e02dd72981cfbd35ce4b.png

这个纯是个人原因,拼音基本不太会打字了,平时电脑和手机也全是五笔打字,所以也是百度了一下Linux怎么装五笔,设置下就用上了。

OpenCV安装

007029b2fa2872c30286a9bec3683d59.png

微卡智享

回到正题了,Linux下安装OpenCV我也是按教程上来的,安装的过程中自己遇到的问题这里记录一下作为笔记。

01

下载依赖

#!/bin/bash
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt install libxvidcore-dev libx264-dev
sudo apt install libatlas-base-dev gfortran 
sudo apt install ffmpeg

上面是要安装的软件,打开VSCode,新建一个文件后复制上面的内容,然后保存到主目录下,起名为download.sh

55897da837185502d0b5f559f1dee815.png

7d980e4ff6150c9bb7c3a49d4f0ae987.png

在当前目录鼠标或键点击在终端打开,接下来修改download.sh的权限,然后执行

sudo chmod 777 ./download.sh

e3c9b6e36a43cb73a5750262daecadd4.png

然后再直接输入./download.sh运行安装依赖,等待结束即可。

02

下载OpenCV源码

69d306c2b8ad94bfaf0ae785a94df2fb.png

在当前目录创建OpenCV的文件夹,鼠标操作即可,点击进去后右键再选择在终端打开。

#下载源码的语句
git clone https://github.com/opencv/opencv.git

27050d962f87d7e1bc51ece6970e18b8.png

应该是需要科学上网才能下载,经过漫长等待后源码都下载成功

03

安装OpenCV

4c836657535cbf87020559b21e8af17a.png

进入opencv下载的源码后,在里面创建一个build的文件夹,进去后还是鼠标右键在终端打开,输入

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON ..


make -j8


sudo make install

配置OpenCV的include路径

安装完成后,OpenCV的hpp文件都在在/usr/local/include/opencv4/opencv2,需要修改一下软链接

ln -s /usr/local/include/opencv4/opencv2/ /usr/include/opencv2/

配置好后可以在usr/include下面看到opencv2的文件夹

040c83a65f1d9d648b3c7aedfd2c5c01.png

OpenCV4.pc的处理

安装前也是看了好几个文章,都介绍到说这个地方注意在 cmake 这一步要加上OPENCV_GENERATE_PKGCONFIG=ON 不然没有pkg-config 支持会很痛苦。并且build中也不会出现opencv4.pc的文件。

编译了好几次没在在Build文件夹下看到opencv4.pc的文件,一直没什么头绪,后面也是无意间在build文件夹下的unix-install文件夹中找到了

87f5abf24b9e772d1c5f1e557fe537b2.png

找到了opencv4.pc的文件,将这个文件复制到/usr/local/lib/pkgconfig目录下,如果提示权限问题,可以在目录/usr/local/lib下打开终端输入

sudo chmod 777 pkgconfig

打开的opencv4.pc的文件里面主要看includedir,上面我们修改了链接路径,所以这里可以不用做任何修改了

# Package Information for pkg-config


prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv2


Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.5.4
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

a6f22f84c05d898cea96bc190763b9ba.png

检测系统中能否找到头文件

pkg-config --cflags opencv4
 pkg-config --libs opencv4

1dd8314f86b26993f2f5d9a5bd089b55.png

配置环境

上面的步骤做完后,在/etc/ld.so.conf.d的目录下可以看到opencv.conf的文件

9a2621e38a51c17c334f7f7ad953a7c9.png

使用VSCode打开后,里面是空白的,这时我们需要添加内容

#在opencv.conf中添加内容:
/usr/local/lib

545a879ba095ebf00538bbdf9ad45c00.png

然后执行生效命令

sudo ldconfig

92ea1129b644bfc2f970cb72307f2f15.png

修改/etc/bash.bashrc

98757e4e404be5f81c55607504de8bcc.png

在bash.bashrc的文件末尾添加

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

827a03fee94320d7d4037d2d335c2046.png

接下来就执行更新命令

source /etc/bash.bashrc  
sudo updatedb

fcf6983bfce54c4e57edaab290a36491.png

完成上面这些,OpenCV的安装配置就算完成了。

03

简单的Demo

安装完成后,来做个简单的Demo测试是否能运行。

1b41df63d25782e81c1d4f350719247e.png

在OpenCV/Test/firstdemo下面创建了一个main.cpp的文件

55d569aa2d9deb42ebcaa989e5c1d3e8.png

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


int main(int argc,char** argv){


    std::cout<<"111"<< std::endl;
    cv::Mat src = cv::imread("/home/vaccae/pic/111.jpg");
    cv::resize(src,src,cv::Size(500,800));
    cv::imshow("src", src);


    cv::waitKey(0);
    return 0;
}

在终端添加配置任务,生成task.json的文件

0efa47715c8cf6c6ac77df03d6383904.png

重点

因为前面OpenCV中已经配置好了pkg-config,所以这里面最重要的一句就是"`pkg-config --libs --cflags opencv4`",双引号里面要加上单引号。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++ 生成活动文件",
      "command": "/bin/g++",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}",
        "`pkg-config --libs --cflags opencv4`"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": "build",
      "detail": "编译器: /bin/g++"
    }
  ]
}

然后按Ctrl+Shift+P,找到C++编辑配置,生成c_cpp_properties.json 文件

60412624330e2a105bf070518df654a9.png

在includePath的目录下加入前面我们链接的OpenCV的头文件目录/usr/include/opencv2

4523e8e1ae010097291d9e8b8776956f.png

launch.json调试文件中主要就是修改program的路径,默认生成的指定目录是工作目录下的Build/Debug/Output中,这里改我们在生成的配置路径即可。

实现效果

86b72472aeb453904646f51b3010b831.png

836136fb0cc79a6e8f38eac4e1d9b9ed.png

3d0d2359d5ec90b2b606ff9dd8a619b9.png

往期精彩回顾

c4eaad61b3683b790022ca6c7a71ddcb.png

AI自动还原OpenCV制作的九宫格拼图游戏(附源码)


c133529dc2cd9630d04608bbea494b6a.png

C++ OpenCV制作九宫格拼图游戏


b88890a2406daf7c1fb9baa2c9f99cad.png

C++ OpenCV生成九宫格图像


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔记---Linux安装OpenCV及VSCode的配置编译 的相关文章

随机推荐

  • 8--UI 初步认识 简易计算器

    UI是App的根基 一个App应该是先有UI界面 然后在UI的基础上增加实用功能 2 UI相对简单易学 UI普遍是学习过程中最简单的一块 能快速拥有成就感和学习兴趣 3 UI至关重要 开发中的绝大部分时间都在处理UI 谨记一条IOS软件开发
  • MySQL根据某一个或者多个字段查找重复数据

    sql 查出一张表中重复的所有记录数据 1 表中有id和name 两个字段 查询出name重复的所有数据 select from xi a where a username in select username from xi group
  • 系列教程

    PDF Search 系列教程来咯 在 Part 1 中 我们将演示如何从 PDF 中提取 处理并存储图像及文本 随着神经搜索 Neural Search 技术的普及 越来越多开发者 开始尝试用 Jina 解决非结构化数据的索引和搜索问题
  • MySQL必知必会 学习笔记 第二十五章 使用触发器

    触发器在MySQL 5中增加 触发器可以在MySQL响应DELETE INSERT UPDATE语句时自动执行一条SQL语句 MySQL 5中触发器名在每个表中唯一而不是在一个数据库中唯一 其他DBMS有的重名限制是数据库范围 以后MySQ
  • lua和测试(一)

    lua做为一门高级语言 在游戏产业运用到机会越来越多了 测试掌握几门脚本语言也有一定的重要性 以下对于lua组合输入做出一些引导 测试需要掌握的关于返回数值 主要用到布尔类 前言的指引 lua的语法比较简单和清晰 学过c语言的可以很好的掌握
  • 并发编程系列之自定义线程池

    前言 前面我们在讲并发工具类的时候 多次提到线程池 今天我们就来走进线程池的旅地 首先我们先不讲线程池框架Executors 我们今天先来介绍如何自己定义一个线程池 是不是已经迫不及待了 那么就让我们开启今天的旅途吧 什么是线程池 线程池可
  • selenium+python 对输入框的输入处理

    最近自己在做项目的自动化测试 公司无此要求 在用户管理模块做修改用户信息时 脚本已经跑成功 并且的确做了update操作 但是自己登陆页面检查 信息却没有被修改 再次确定系统该模块的编辑功能可用 脚本如下 if result num gt
  • 近千万EOS被盗事件回顾,大家请保护好自己的EOS私钥

    最近有伙伴被盗了价值近千万的EOS 于是查看了这次被盗活动账号记录 这次分享出来 一是有可能大家有线索 二是也让大家意识到数字货币私钥安全的重要性 事件回顾 受害人在7 9号被偷盗人通过update auth更换了账号授权公私钥 紧接着被转
  • 零基础到GPT高手:快速学习与利用ChatGPT的完全指南

    进入人工智能时代 令人惊叹的ChatGPT技术正在引爆全球 您是否想象过能够与智能语言模型对话 提升工作效率 解锁创意 甚至实现商业化变现 在本篇文章中 我将向你揭示ChatGPT的原理 学习技巧 并展示如何利用ChatGPT提升工作效率和
  • Windows11:QT5.14.2+PCL1.12.0+VS2019环境配置

    之前在win10系统下配置了PCL1 8 1 QT5 9 1 VS2015的开发环境 由于PCL库已经更新到了1 12 1而且1 8 1一直有bug 为了使用下新的算法库 今天配置一下新的开发环境 1 安装Qt5 14 2 Qt5 14 2
  • 【b站雅思笔记】Simon‘s IELTS Course - 听力部分

    前情提要 b站up主贼开心的小林上传的Simon的听力课 资料均来源于她 参考 雅思阅读 最好的雅思课程 阅读部分全集 https www bilibili com video BV1ea4y1x7qR spm id from 333 78
  • Spring为什么要用的三级缓存解决循环依赖

    一 代码准备 Component aService public class AService Autowired private BService bService public void test System out println
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • react_hooks系列05_useRef,useImperativeHandle,高阶组件forwordRef

    一 useRef 1 uesRef使用在官方标签上 useRef 返回一个可变的 ref 对象 其 ref 对象 current 属性被初始化为传入的参数 initialValue 返回的 ref 对象在组件的整个生命周期内保持不变 imp
  • 蓝桥杯字母阵列

    字母阵列 递归解法 仔细寻找 会发现 在下面的8x8的方阵中 隐藏着字母序列 LANQIAO SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLANQIAO RSFWFNYA XIFZVWAL COAIQNAL 我
  • 教你怎么导入导出数据

    最近在做一个项目 需要对数据进行导入导出 实现之后 自己也做了一个总结 总体来说还是比较容易的 第一次的话肯定有许多坑的 细节真的很重要 当你踏过一个又一个坑 一路路走来 你会发现自己的信心越来越强 对于数据的导入导出 我们首先写一个工具类
  • 代码检查、评审、单元测试工具 大搜集

    看书真是迅速进入一个陌生领域的最快办法 系统的 体系完整的知识比起在互联网上七拼八凑出的认识强太多了 先记下一些理论概念 软件生命周期模型 分析 设计与文档 编码与审查 测试与调试 发布与维护 软件测试对象的6种分类 单元测试 静态检查 动
  • 数据结构---线性表的静态/动态分配与顺序/链式存储

    线性表 基于严魏敏版数据结构c语言实现 谭浩强版c语言 数据元素在计算机中的存储分为顺序存储和链式存储 顺序存储 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系 链式存储 借助指示元素存储地址的指针表示数据元素之间的逻辑关系 ps
  • matlab定义机器人位置,机器人自定位问题(数学建模)

    形形色色 各式各样的机器人正在走进人们的生产与生活 发挥着越来越重要的作用 这些机器人 一般都拥有 感官 各种传感器 大脑 智能计算的软硬件 和 执行器 各种操控设备 等 它们在自己的工作场合内 能自主感知 自主决策并完成使命 为达到这样的
  • 笔记---Linux安装OpenCV及VSCode的配置编译

    学更好的别人 做更好的自己 微卡智享 本文长度为4250字 预计阅读10分钟 前言 最近在学点新东西 教程中主要也是在Linux中使用 对于我这个以前从未接触Linux系统的人来说 正好也是个机会掌握下LInux系统 这篇就是记录在Linu