Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程

Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程

      • Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程
        • 前言
      • OpenCV
        • 概述
        • 核心功能
        • 优势特点
        • 应用领域
        • 安装与使用
      • OpenCV_contrib
        • 概述
        • 核心功能
        • 具体模块
      • 安装与使用
        • 一、准备工作
        • 二、下载OpenCV和OpenCV_contrib
        • 三、编译和安装OpenCV
        • 四、配置环境变量
        • 五、验证安装
        • 六、总结
        • 七、安装时遇到的问题

Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程

前言

在Ubuntu 20.04上安装OpenCV和OpenCV_contrib可以为你提供强大的计算机视觉和图像处理功能。它们各自具有独特的特点和功能。以下是对它们的详细介绍:

OpenCV

概述

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,自1999年由Intel建立以来,凭借其强大的功能和广泛的应用,迅速成为计算机视觉领域的核心力量。它提供了丰富的工具和功能,广泛应用于图像处理、视频分析、视图重建、物体识别、面部识别等领域。

核心功能

OpenCV的功能覆盖了图像处理的各个方面,主要包括但不限于以下几点:

  • 图像处理:支持图像的加载、保存、调整大小、旋转、裁剪、滤波、边缘检测等操作。OpenCV提供的直方图均衡化、图像平滑等功能,能够有效改善图像质量,为后续处理奠定基础。
  • 物体检测与跟踪:集成了多种目标检测和跟踪算法,如Haar级联检测器、HOG特征检测器、卡尔曼滤波器等,广泛应用于人脸检测、行人检测、车牌识别等场景。
  • 特征提取与匹配:包括角点检测、描述符提取、特征匹配等功能,有助于从图像中提取关键信息并进行比较和分析。
  • 机器学习:集成了分类、聚类、回归等机器学习算法,方便进行模式识别和数据挖掘。
  • 深度学习:与主流深度学习框架(如TensorFlow、PyTorch)集成,支持神经网络模型的训练和推断,推动计算机视觉技术的进一步发展。
  • 视频分析:包括视频捕捉、视频处理、目标跟踪、视频稳定等功能,适用于监控和安全等应用。
优势特点
  • 开源性:作为开源项目,OpenCV允许任何人自由地使用、修改及分发其源代码。
  • 跨平台兼容性:支持Windows、Linux、Mac等多个操作系统,展现了出色的灵活性和广泛适用性。
  • 高效性能:基于C/C++的底层设计使得OpenCV在图像处理任务中表现卓越,计算能力出众。
  • 可扩展接口:除C/C++外,还提供Python等语言接口,便于开发者根据需求进行个性化扩展和定制。
应用领域

OpenCV的广泛应用领域使其成为连接多个行业的桥梁,包括但不限于:

  • 智能监控:通过人脸检测、行为分析等技术,提高监控系统的智能化水平。
  • 自动驾驶:在车辆识别、道路检测、障碍物避让等方面发挥重要作用。
  • 医学图像处理:辅助医生进行病灶检测、手术规划等。
  • 工业检测:实现产品质量检测、自动化生产等。
  • 农业图像分析:监测作物生长状况、病虫害识别等。
  • 机器人技术:为机器人提供视觉感知能力,实现自主导航、目标抓取等功能。
安装与使用

以Python用户为例,可以通过pip命令安装OpenCV库:

pip install opencv-python

或者使用conda进行安装:

conda install -c conda-forge opencv

安装完成后,便可以在Python项目中导入OpenCV库,并使用其提供的函数和类进行图像处理或计算机视觉任务。

OpenCV_contrib

概述

OpenCV_contrib是OpenCV的一个扩展库,主要用于开发和维护OpenCV的额外模块。这些模块通常包含高级功能、实验性功能以及社区贡献的功能扩展,为开发者提供了更广泛的工具选择,以处理复杂的视觉任务。

核心功能

OpenCV_contrib项目包含了许多额外的功能模块,这些模块通常具有以下特点:

  • 高级功能:包括但不限于深度学习、增强现实、3D重建等高级计算机视觉功能。
  • 实验性功能:这些模块可能还在开发中,API可能不稳定,因此不适合直接集成到OpenCV的主库中。
  • 社区贡献:许多模块是由社区开发者贡献的,提供了丰富的功能扩展。
具体模块

OpenCV_contrib包含了一系列先进的算法和技术,如:

  • Face Detection and Recognition:提供了基于深度学习的dnn模块,可以用于实时的人脸检测和识别。
  • Super Resolution:superres模块提供了图像超分辨率重建算法,能够提升低清晰度图片的质量。
  • Structure from Motion (SfM):使用sfm模块可以从多视角图像中恢复场景的三维结构。
  • Feature Detectors and Descriptors:xfeatures2d提供了许多特征检测和描述符,如AKAZE、SURF等,这些在对象识别和图像匹配中非常有用。

此外,OpenCV_contrib还引入了实验性的模块,例如optflow(光流估计)、text(文本检测和识别)以及aruco(AR标记),这些都对研究者和开发者极其有价值。

安装与使用

OpenCV_contrib的安装通常需要与OpenCV主库一起进行编译。确保OpenCV和OpenCV_contrib的版本一致,本教程将指导你如何一步步安装OpenCV和OpenCV_contrib,并确保配置正确。。安装完成后,便可以在项目中导入并使用OpenCV_contrib提供的额外模块和功能。

一、准备工作
  1. 更新系统软件包

    首先,确保你的系统软件包是最新的。打开终端,输入以下命令:

    sudo apt update
    sudo apt upgrade
    

在这里插入图片描述
2. 安装依赖项

安装OpenCV和OpenCV_contrib所需的依赖项:

sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

在这里插入图片描述

二、下载OpenCV和OpenCV_contrib
  1. 创建工作目录

    首先,创建一个工作目录来存放OpenCV和OpenCV_contrib的源码:

    mkdir ~/opencv_build
    cd ~/opencv_build
    

在这里插入图片描述
2. 克隆OpenCV和OpenCV_contrib的源码

如果希望安装最新版可直接使用git clone命令从GitHub上克隆OpenCV和OpenCV_contrib的源码:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

如果希望下载指定版本有两种方式:
官网下载:https://opencv.org/releases/
在这里插入图片描述
如果要下载对应的opencv_contrib,需要在github仓库进行(如图):
https://github.com/opencv
在这里插入图片描述
进入指定仓库,找到Release,进行源码下载:
在这里插入图片描述
在这里插入图片描述
解压指令
zip:解压到当前文件夹

    unzip opencv-4.10.0.zip

tar.gz:

    tar -zxvf opencv-4.10.0.tar.gz


将opencv和对应版本的opencv_contrib全部解压。
在这里插入图片描述

三、编译和安装OpenCV
  1. 创建build目录

    在OpenCV源码目录下创建一个build目录,并进入该目录:

    cd ~/opencv_build/opencv-4.10.0
    mkdir build
    cd build
    

在这里插入图片描述

  1. 使用CMake配置OpenCV构建

    使用cmake命令配置OpenCV的构建选项,包括指定OpenCV_contrib的路径:

cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.10 \
-D OPENCV_EXTRA_MODULES_PATH=/root/workspace/programs/opencv_build/opencv_contrib-4.10.0/modules \
-D OPENCV_GENERATE_PKGCONFIG=YES \
-D BUILD_opencv_world=YES \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/root/workspace/anaconda3/envs/dscnet/bin/python3 \
-D PYTHON3_EXECUTABLE=/root/workspace/anaconda3/envs/dscnet/bin/python3 \
-D PYTHON3_LIBRARY=/root/workspace/anaconda3/envs/dscnet/lib/libpython3.8.so \
-D PYTHON_INCLUDE_DIR=/root/workspace/anaconda3/envs/dscnet/include/python3.8 \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/root/workspace/anaconda3/envs/dscnet/lib/python3.8/site-packages/numpy/core/include \
-D PYTHON3_PACKAGES_PATH=/root/workspace/anaconda3/envs/dscnet/lib/python3.8/site-packages ..

在这里插入图片描述

注意:-D OPENCV_EXTRA_MODULES_PATH选项指定了OpenCV_contrib的modules目录的路径。
如果该命令中不加-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.10,则默认各部分分别安装在/usr/local/目录的include/, bin/, lib/3个文件夹下。

-D OPENCV_GENERATE_PKGCONFIG=YES: OpenCV4以上版本默认不使用pkg-config,该编译选项开启生成opencv4.10.pc文件,支持pkg-config功能。

-D WITH_CUDA=ON实现和cuda的联合编译。

后面关于python的路径设置以已安装anaconda的设定为准,需要注意的是python版本和你使用的虚拟环境一致。

这里有时候偶尔会报错"fatal error: numpy/ndarrayobject.h: 没有那个文件或目录",解决方法:打开对应虚拟环境的python输入

import numpy as np
np.get_include()

按照这个输出路径重新配置PYTHON3_NUMPY_INCLUDE_DIRS,然后再cmake。
注意:如果是在build目录下进行cmake,一定不要忘了最后的两个点cmake xxx ..

  1. 编译和安装OpenCV

    使用make命令编译OpenCV,并使用sudo make install命令安装:

    make -j$(nproc)
    sudo make install
    

    注意:-j$(nproc)选项会利用你系统的所有核心来加速编译过程。

四、配置环境变量
  1. 更新动态链接库配置

    /etc/ld.so.conf.d/目录下创建一个新的配置文件,并添加OpenCV库的路径:

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

    在文件中添加以下内容:

    /usr/local/lib
    

    保存并关闭文件,然后运行sudo ldconfig命令来更新动态链接库配置。

  2. 配置环境变量

    打开/etc/bash.bashrc文件,并添加以下行来配置环境变量:

    sudo nano /etc/bash.bashrc
    

    在文件末尾添加以下内容:

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

    保存并关闭文件,然后运行source /etc/bash.bashrc命令来使更改生效。

五、验证安装
  1. 检查OpenCV版本

    在终端输入以下命令来检查OpenCV的版本:

    pkg-config --modversion opencv4
    

    如果输出了OpenCV的版本号,则表示安装成功。

  2. 编译和运行示例程序

    进入OpenCV的samples目录,并编译和运行一个示例程序来验证安装:

    cd ~/opencv_build/opencv/samples/cpp/example_cmake
    cmake .
    make
    ./opencv_example
    

    如果程序成功运行并显示了一个窗口,则表示OpenCV和OpenCV_contrib已经正确安装和配置。

六、总结

通过以上步骤,你已经成功在Ubuntu 20.04上安装了OpenCV和OpenCV_contrib,并进行了基本的配置和验证。现在你可以开始使用OpenCV进行各种计算机视觉和图像处理任务了。

七、安装时遇到的问题

ippicv_2020_lnx_intel64_20191018_general.tgz下载不了
手动下载ippicv_2020_lnx_intel64_20191018_general.tgz

https://github.com/opencv/opencv_3rdparty/blob/ippicv/master_20191018/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz(根据错误信息更新)

上传至/home/test(自定义目录)下

修改ippicv.cmake

 set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")ocv_download(FILENAME ${OPENCV_ICV_NAME}HASH ${OPENCV_ICV_HASH}URL"${OPENCV_IPPICV_URL}""$ENV{OPENCV_IPPICV_URL}""https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"DESTINATION_DIR "${THE_ROOT}"ID IPPICVSTATUS resUNPACK RELATIVE_URL)

改为

 set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")ocv_download(FILENAME ${OPENCV_ICV_NAME}HASH ${OPENCV_ICV_HASH}URL"${OPENCV_IPPICV_URL}""$ENV{OPENCV_IPPICV_URL}""file:///home/test/"DESTINATION_DIR "${THE_ROOT}"ID IPPICVSTATUS resUNPACK RELATIVE_URL)

ade-v0.1.1f.zip下载不了
手动下载

https://github.com/opencv/ade/archive/v0.1.1f.zip(根据错误信息更新)

上传至/home/test

修改DownloadADE.cmake

ocv_download(FILENAME ${ade_filename}HASH ${ade_md5}URL"${OPENCV_ADE_URL}""$ENV{OPENCV_ADE_URL}""https://github.com/opencv/ade/archive/"DESTINATION_DIR ${ade_src_dir}ID ADESTATUS resUNPACK RELATIVE_URL)

改为

ocv_download(FILENAME ${ade_filename}HASH ${ade_md5}URL"${OPENCV_ADE_URL}""$ENV{OPENCV_ADE_URL}""file:///home/test/"DESTINATION_DIR ${ade_src_dir}ID ADESTATUS resUNPACK RELATIVE_URL)

注意,修改是最后的斜杠(/)不能丢

问题:编译OpenCV 4.10.0, 显示出错:

/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_uint32@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_sint32@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_pointer@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_void@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_prep_cif@LIBFFI_BASE_7.0
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_call@LIBFFI_BASE_7.0' collect2: error: ld returned 1 exit status make[2]: *** [apps/annotation/CMakeFiles/opencv_annotation.dir/build.make:104:bin/opencv_annotation] 错误 1 make[1]: *** [CMakeFiles/Makefile2:3208:apps/annotation/CMakeFiles/opencv_annotation.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务....

问题分析:系统的动态链接库和Anaconda的动态链接库指向的版本不同,因此编译出错。

解决方法:先下载一个工具包locate。比find好用。

$ sudo apt install locate
$ sudo updatedb

然后用内置命令ldd查看出现问题的libwayland-client.so.0当中,所依赖的ffi这个库的叫什么。

$ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi

我们可以发现依赖的这个库叫做libffi.so.7。
在这里插入图片描述
之后locate这个文件,发现除了/usr/lib/x86_64-linux-gnu之外,我的Anaconda安装目录/lib下面也有一个libffi.so.7。输入以下命令分别查看两个libffi.so.7链接的动态库文件:

查看系统的libffi

$ ll /lib/x86_64-linux-gnu/ | grep ffi

查看Anaconda的libffi

$ ll ~/anaconda3/lib/ | grep ffi

结果显示系统的libffi.so.7指向了7.1.0版本,而Anaconda下的指向了8.1.2版本。
在这里插入图片描述
在这里插入图片描述

因此,把anaconda下的libffi.so.7指向系统的7.1.0就可以了。

$ cd (你的Anaconda安装目录)/lib
$ sudo rm libffi.so.7
$ sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7

再次查看Anaconda下的ffi,发现libffi.so.7已经指向了lib/x86_64-linux-gnu/libffi.so.7.1.0。
在这里插入图片描述
再次编译OpenCV,通过。

总结:当编译程序的时候,如果安装了Anaconda,经常会出现动态链接库的依赖指向问题。保证系统和Anaconda的依赖库版本一致,可以避免一些Bug。

ldd这个命令常用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),可以解决程序因缺少某个库文件而不能运行的一些问题。
————————————————

问题参考原文链接

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

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

相关文章

HCIP--2 TCP有关笔记

学习目标: 目录 学习目标: 学习内容: TCP协议 七层结构 END.......... 问题:TCP/IP 的四层协议 问题:网络的七层结构及其作用 问题:协议名称是什么? TELNET---远程登陆系统 HTTP---超文本传输协…

【优先算法】双指针

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:优先算法 个人主页:Celias blog~ 目录 ​​​​​​移动零 复写零 快乐数 盛水最多的容器 …

Apache配置案例二:基于域名的虚拟主机搭建

文章目录 前言一、任务要求:二、任务分析:二、任务步骤:总结 前言 基于域名的虚拟主机搭建,涉及诸多知识点,一是域名服务器的搭建配置,前面的博文《图示详解OpenEuler下 DNS安装、配置与测试》、《图示详解…

如何选择适合自己的 Python IDE

集成开发环境(IDE)是指提供广泛软件开发能力的软件应用程序。IDE 通常包括源代码编辑器、构建自动化工具和调试器。大多数现代 IDE 都配备了智能代码补全功能。在本文中,你将发现目前市场上最好的 Python IDE。 什么是 IDE? IDE…

开源项目-投票管理系统

哈喽,大家好,今天主要给大家带来一个开源项目-投票管理系统 投票管理系统主要有首页,发起投票,管理投票,参与投票,查看投票等功能 首页 为用户提供了一键导航到各个功能模块的便捷途径。 新增投票 用户…

OpenSSL

OpenSSL 概述 OpenSSL 是一个开源的、安全传输协议实现工具,广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中,OpenSSL 被用于构建和维护 SSL/TLS 通信,确保数据在传输过程中的机密性和完整性。 简单来…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥(牟羽)带来的主题演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化,支持按量付费、自适应弹性、跨可…

fmql之Linux以太网

正点原子第57章。 dts fmql-dtsi&#xff1a; 我们用的PHY芯片是RTL8211F&#xff1a; 需要添加PHY信息&#xff1a; fmql-dtsi提供的参考&#xff1a; 根据vivado工程自动生成的&#xff1a; reg <0x1>; 配置 疑问 网口通讯需要网线&#xff0c;但是目前板卡上只有PS…

Java面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) …

在 Elasticsearch 中顺利管理季节性时间变化

作者&#xff1a;来自 Elastic Valeriy Khakhutskyy, James Gowdy 用于 Elasticsearch 异常检测的新夏令时日历。 每年春季和秋季两次&#xff0c;许多国家/地区都会调整时钟以更好地利用日光。这些时钟调整不仅会带来时差和 “困倦的星期一” 的感觉&#xff0c;还会带来来自…

Qt——信号和槽

一.信号和槽概述 谈及信号&#xff0c;很容易联想到在Linux系统中所分享到的信号。那么Linux信号和Qt信息有什么不同&#xff1f; 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。比如 "用户点击按钮" 是⼀个事件&#xff0c;"用户关 闭窗口&quo…

必胜客万圣节“邪恶鬼手披萨”,品牌营销的“鬼”才之作!

在万圣节的神秘氛围下&#xff0c;各大品牌纷纷推出创意营销活动&#xff0c;试图在这个充满奇幻色彩的节日里捕获消费者的心。其中&#xff0c;必胜客推出的“邪恶鬼手披萨”无疑是一次令人拍案叫绝的品牌营销“鬼”才之作&#xff0c;它不仅巧妙地融合了节日元素&#xff0c;…

3D Gaussian Splatting代码详解(一):模型训练、数据加载

1 模型训练 def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):first_iter 0# 初始化高斯模型&#xff0c;用于表示场景中的每个点的3D高斯分布gaussians GaussianModel(dataset.sh_degree)# 初始化…

[MySQL#6] 表的CRUD (1) | Create | Retrieve(查) | where

目录 1. 插入 1.1 单行数据 - 全列插入 指定列插入 1.2 多行数据 - 全列插入 指定列插入 1.3 更新 1.4 替换 2. 查找 2.1 select 列 2.2 where 条件 具体案例 2.3 结果排序 总结关键字执行顺序 2.4 筛选分页结果 CRUD : Create(创建)&#xff0c;Retrieve(读取)&…

[机器学习]集成学习

1 集成学习 强强联合、弱弱变强Bagging&#xff08;平权投票&#xff09;&#xff1a;随机森林Boosting&#xff08;加权投票&#xff09;&#xff1a;Adaboost、GBDT、XGBoost、LightGBM 2 随机森林 3 Adaboost 放大错误数据&#xff0c;缩小正确数据

第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八

一、流量控制 一般来说&#xff0c;我们总是希望数据传输得更快一些&#xff0c;但是如果发送方把数据发送得太快&#xff0c;接收方可能来不及接收&#xff0c;造成数据的丢失&#xff0c;数据重发&#xff0c;造成网络资源的浪费甚至网络拥塞。所谓的流量控制&#xff08;fl…

在Excel中如何快速筛选非特定颜色

Excel中的自动筛选是个非常强大的工具&#xff0c;不仅可以筛选内容&#xff0c;而且可以筛选颜色&#xff0c;例如筛选A列红色单元格。但是有时希望筛选除了红色之外的单元格&#xff08;下图右侧所示&#xff09;&#xff0c;其他单元格的填充色不固定&#xff0c;有几种颜色…

数据结构---链表(一)【不带头单向非循环】

文章目录 链表概念链表的使用LinkedList 的几种遍历方式单链表的模拟实现&#xff08;不带头&#xff09;链表面试题 观察ArrayList 顺序表的源码发现&#xff0c;底层是使用数组实现的。由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xf…

Pytorch(一)

一.PyTorch环境配置及安装 1.1 工具安装 1.1.1 Anaconda下载 清华大学镜像站下载&#xff0c;版本为Anaconda3-5.2.0-Windows-x86_64&#xff08;对应python3.6.5&#xff09; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 1.1.2…

关于我的数据结构与算法——初阶第二篇(排序)

&#xff08;叠甲&#xff1a;如有侵权请联系&#xff0c;内容都是自己学习的总结&#xff0c;一定不全面&#xff0c;仅当互相交流&#xff08;轻点骂&#xff09;我也只是站在巨人肩膀上的一个小卡拉米&#xff0c;已老实&#xff0c;求放过&#xff09;。 排序的概念及其运…