图像边缘检测与图像分割常用算法研究分析-含Matlab代码

news2025/7/5 21:41:55

⭕⭕ 目 录 ⭕⭕

  • ✳️ 引言
  • ✳️ 一、经典边缘检测算子
    • ✳️ 1.1 Roberts 算子与实验验证
    • ✳️ 1.2 Sobel 算子原理与实验验证
    • ✳️ 1.3 Prewitt 算子与实验验证
    • ✳️ 1.4 Log 算子与实验验证
    • ✳️ 1.5 Canny 算子与实验验证
  • ✳️ 二、图像分割原理及其实验验证
    • ✳️ 2.1 基于阈值处理的分割技术
      • ✳️ 2.1.1 全局阈值分割
      • ✳️ 2.1.2 动态阈值分割
        • ✳️ (1)Bernsen 算法与实验验证
        • ✳️ (2)大津法阈值插值算法与实验验证
        • ✳️ (3)水线阈值(分水岭)算法与实验验证
    • ✳️ 2.2 基于边缘信息的分割技术
    • ✳️ 2.3 基于区域处理的分割技术
      • ✳️ 2.3.1 区域生长算法实验验证
      • ✳️ 2.3.3 四叉树分解算法实验验证
  • ✳️ 三、参考文献
  • ✳️ 四、Matlab代码获取

✳️ 引言

本博文主要分析了常用的边缘检测与图像分割算法,对于边缘检测算法,分析了Roberts 算子、Sobel 算子、Prewitt 算子、Log 算子、 Canny 算子原理,并通过Matlab编程对上述算法进行了实验验证。针对图像分割,本文介绍了极小值点阈值分割算法、最优阈值图像分割法、迭代阈值分割、Otsu算法分割、Bernsen算法、大津法阈值插值算法、水线阈值算法(分水岭或流域watershed)、区域生长算法、四叉树分解等,并通过Matlab程序对上述图像分割算法进行了实验验证。

✳️ 一、经典边缘检测算子

目标对象的边缘在图像的某一区域内一般会呈现出急剧变化的状态,因此,可以将图像中的灰度值变化作为边缘检测的判断条件,边缘检测的目的就是寻找出图像中灰度值非连续变化的位置。常见的图像边缘类型一般可以归纳为三种:屋脊型、阶跃型以及脉冲型。

✳️ 1.1 Roberts 算子与实验验证

Roberts 边缘检测算子又被称为交叉微分算子,它的基本思想是对图像中相互垂直的像素点进行灰度差分运算,然后通过差分求解出像素点的梯度值。在实际应用中,一般采用对角方向上两个相邻的像素点。其计算公式为:

在这里插入图片描述
所对应的卷积模板为:

在这里插入图片描述

Roberts 边缘检测算子的定位精度高,边缘单像素性强,在垂直和水平方向的边缘检测效果较好。但是,因其直接将图像与卷积模板进行计算,未对图像做任何处理,所以受噪声的干扰较大,算法的鲁棒性较低,容易造成图像的局部边缘丢失,产生图像边缘不连续现象。

在这里插入图片描述

图 1 Roberts算子边缘检测结果

✳️ 1.2 Sobel 算子原理与实验验证

图像中若某一像素点的梯度值较大,则其邻域的灰度变化较为迅猛,若该点的梯度值较小,那么其邻域内的灰度变化也相对平稳,通过对比可以发现,像素梯度值与邻域灰度差值之间为正比关系。这一特性与图像边缘处的特性极为相似,因此,我们可以通过对图像一阶导数的计算,求解各点的梯度值,并以此为依据判断出是否为边缘像素点。

上述理论正是 Sobel 边缘检测算子的基本思想,以一阶导数为基础,对图像中的每一个像素点,计算上、下、左、右四个方向上的临近像素点的像素值得到加权差值,对于赋予的权值,根据邻域像素点与中心像素的距离,距离越近则权值越大,最后求解微分,计算出中心像素的梯度值。

Sobel 边缘检测算子在进行卷积操作时,所使用的卷积核为 3*3 的矩阵,通常包含水平方向模板和垂直方向模板。使用这两个模板对图像分别卷积,将中心像素与模板中心元素互相对应。在完成卷积运算后,比较两个卷积核的输出结果,以较大值为该点的梯度值,并与设定的阈值进行比较,判断该点是否为边缘点。

在这里插入图片描述

Sobel 边缘检测算子计算方法简单,处理速度快,且图像边缘检测效果较好,计算出边缘方向信息非常准确。由于在计算过程中加入了邻域内像素点对梯度值的参考,分别对各点赋予合适的权重,使得 Sobel 算子有着较强的抗噪能力。但是,因为仅使用了垂直和水平方向上的两个卷积核模板,对于有复杂纹理的图像,处理效果不是很理想,并且由于局部灰度加权平均的影响,Sobel 边缘检测算子容易产生双边缘,影响图像边缘定位的准确率。

在这里插入图片描述

图 2 Sobel算子边缘检测结果

✳️ 1.3 Prewitt 算子与实验验证

Prewitt 边缘检测算子的核心思想与上述 Sobel 算子较为相像,也是结合方向差分和局部平均进行梯度计算。但是在计算过程中,Prewitt 算子认为中心像素邻域内的像素点对该点造成的影响是一样的,因此对 Sobel 算子的卷积模板进行了修改,Prewitt算子的卷积模板如下式所示:

在这里插入图片描述

Prewitt 边缘检测算子对图像边缘进行检测时,因为它的计算思路与 Sobel 算子相同,导致在检测复杂图像时也会出现类似的问题,但是它在抗噪方面的表现要比 Sobel算子更好。

在这里插入图片描述

图 3 Prewitt算子边缘检测结果

✳️ 1.4 Log 算子与实验验证

Log 边缘检测算子是在 Laplacian 算子的基础上进行改进实现的,考虑到其较弱的抗噪能力,Log 算子首先对图像使用高斯滤波器进行平滑去噪,然后再进行偏导计算,以此来提高图像自身的质量,后续通过 Laplacian 算子处理较低噪声的图像完成边缘检测。其中高斯滤波函数为:

在这里插入图片描述
上式中的σ为高斯滤波器的平滑系数,σ的值越大,去噪能力越强。

Log边缘检测算子的基本步骤为:

(1)图像平滑去噪,对原始图像 I 进行高斯滤波,获取滤波后的图像 G。

(2)使用 Laplacian 变化对图像 G 进行二阶偏导计算。如下式所示。

在这里插入图片描述

(3)在偏导计算完成后,将二阶导数过零点的对应点判断为图像边缘像素点。

在实际工程中,由于算法运算量较大,为了加快运算速度,可以先进行微分运算再对图像进行卷积,即直接对高斯滤波器使用 Laplacian 变换,然后再将变换结果与图像进行卷积运算,这样计算出的二阶导数为:

在这里插入图片描述
Log 边缘检测算子在抗噪能力上相比 Laplacian 算子有着明显的提升,但是平滑系数的选取却存在一定的缺陷,提高平滑系数会使边缘细节丢失,降低平滑系数又会导致抗噪能力的下降。

在这里插入图片描述

图 4 Log算子边缘检测结果

✳️ 1.5 Canny 算子与实验验证

Canny 算子是 John.F.Canny 于 1986 年提出的一种多级边缘检测算法,它的算法结构与 Log 算子有着一定的相似之处,首先使用滤波算法来平滑图像,降低噪声对边缘检测处理的干扰,在完成图像去噪后,再对图像中各点进行梯度值计算,提取图像边缘。

John.F.Canny 在提出边缘检测算子的同时,也提出了判断边缘检测算子性能的三个依据:

(1)优秀的检测性能,一个优秀的边缘检测算法,在检测图像边缘时具有较小的错检率和误检率,将非边缘点判定为边缘点的可能性尽可能降低。最后得到的图像信噪比尽可能最大。

在这里插入图片描述
式中,G(-x)表示图像的边函数,f(x)表示图像去噪过程中使用的滤波器函数,代表图像中噪声的均方差。

(2)高的定位精度,图像中检测出边缘点与其对应的真实边缘点之间的距离越小,就说明该算法的定位精度越高。

(3)最低的边缘响应,对应图像中的真实边缘,尽可能保证检测过程中只有一个像素点响应,降低多个像素点响应同一边缘的概率,即最大可能抑制虚假边缘。

Canny 算子主要通过以下五个步骤实现对图像的边缘检测:

步骤 1:应用高斯滤波平滑图像。传统的 Canny 算子采用高斯滤波器,利用其中的 1 阶导数按行和列对原始图像进行卷积降噪,从而得到平滑图像。

在这里插入图片描述

式中的 σ 为调节图像平滑程度的高斯函数标准差; f(x,y)为原始图像;I(x,y)为平滑滤波处理后的图像。

步骤 2:计算梯度方向及幅值。传统的 Canny 算子从水平和垂直两个方向上采用2×2 的模板通过一阶偏导的有限差分计算出平滑后的图像的梯度幅值和梯度方向

在这里插入图片描述
G(x,y)和 θ(x,y)分别为平滑图像 I(x,y)的梯度幅值和梯度方向。

步骤 3:应用非极大值抑制。在梯度计算之后,图像提取出的边缘仍较为模糊,并不能满足准则(3)的要求,因此需要对其进行“减薄”处理,非极大值抑制将像素点的梯度值与其梯度方向上相邻的两个像素点的梯度值进行比较,判断该点的梯度值是否为最大值,若是,则认为该点可能是边缘点并保留其梯度值,反之则此像素点必然不是边缘点,将其梯度值归零。该方法可以有效保证图像边缘的单像素性。

步骤 4:应用双阈值检测。在经过非极大值抑制之后,仍然有较多噪声及虚假边缘被判定为真实边缘,所以需要对其进一步处理。通常使用高低两个阈值。若像素点梯度值大于设定的高阈值,那么该点被标记为强边缘点,即为图像的真实边缘点。如果边缘梯度值在高低阈值的区间内,则将其标记为弱边缘点,小于低阀值的点则直接被抑制。

步骤 5:滞后边界跟踪。一般情况下,若弱边缘点为真实边缘,那么它与强边缘点理应为连通状态,反之则不会连通。因此,若某一弱边缘点与唯一强边缘点连接,则该点被判定为真实边缘点,若该点 8 邻域内没有强边缘点,则将该点认定为虚假边缘点,进行抑制处理。

Canny 边缘检测算子基于最优化思想,在检测效果上能够满足较多应用场景。使用高斯滤波对图像进行去噪处理,因此对噪声有较强的抑制能力,采用高低阈值检测和滞后边界跟踪,在确保图像边缘检测精度的同时,能够保持图像具有较好的连续性。

在这里插入图片描述

图 5 Canny算子边缘检测结果

✳️ 二、图像分割原理及其实验验证

图像分割是图像处理中的基础性关键技术之一,自上世纪信息技术革命发生以来一直受到人们的髙度重视,至今为止已经提出上千上万种的算法。但是因为目前提出的分割算法尚无一种通用的分割理论,大部分都是针对具体问题进行分析,且没有一种适用于所有种类图像的分割理论。此外,现在还没有一个好的普适的分割评价标准,这也给图像分割技术的发展应用带来许多实际困难。最近这几年又出现了不少新方法或改进算法,对己有的经典方法和新出现的方法作了概述,并且将图像分割方法划分为阈值分割、边缘检测、区域提取、彩色图像分割和结合特定理论工具这5类分割方法。

✳️ 2.1 基于阈值处理的分割技术

✳️ 2.1.1 全局阈值分割

阈值化分割技术是图像分割领域中最基本也是出现比较早的图像分割技术,它假定图像中的目标和背景占据不同灰度级范围。据此利用他们在灰度特性上的不同点把图像空间对应于现实中的景物进行区域分割,邻近区域彼此之间的灰度级别不同,但是每个区域内的灰度级别是相同的,所以通过判断图像中在同一类中的像素灰度值大小,就能对其进行识别是否属于同一个物体。图像中的每个像素点是属于背景还是属于物体,通过选择适当的阈值对其加以确认后就能生成相应的二值图像,因此阈值分割的核心问题是选择合适的阈值。其中最常用的方法是从图像的灰度直方图出发,计算出每个灰度级的概率分布密度大小,再基于一定的评判标准选择一个或者几个适当的阈值,从而能够得出每个像素点的归属问题。有趣的是评判标准不同,则得到的阈值化算法就不同。常见的阈值方法有最优阈值法、最小误差法、Otsu方法和迭代阈值法等。其中Otsu方法又称为最大类间方差法,是一种计算简单而效果又稳定的方法。在多数情形下,未来图像分割技术中,阈值的选择将朝着综合使用两种甚至更多方法的方向发展。其分割方法的计算量小,且不需要图像先验的相关信息,如果只对图像的灰度信息进行考虑的话,其速度远远大于其他的方法,另外,可是该方法并没有对图像的空间信息进行考虑,所以还有很多方面都还有待完善,如分割区域的连续性和分割复杂图像时的可靠性等。

在这里插入图片描述

图 6 全局阈值分割结果 (a)原始图像;(b) 极小值点阈值分割结果;(c) 最优阈值分割结果;(d) 迭代阈值分割结果;(e) OTSU阈值分割结果

✳️ 2.1.2 动态阈值分割

✳️ (1)Bernsen 算法与实验验证

Bernsen算法的基本思想为:设置两个初始值T1=15和T2=128,计算以任意一个像素g为中心、大小为(2w+1)×(2w+1)窗口内的所有像素灰度值的最大值M与最小值N,得到M和N的均值T。若M-N>T1,则当前点的阈值为T;若M-N<T1,则表示该窗口所在区域灰度级差别较小,则窗口在目标区或在背景区,再判断T与T2的关系:若T>T2,则当前点的灰度值为255;否则,当前点g的灰度值为0。利用阈值T遍历图像中每个像素点,得到与原图像维数相同的二值化图像。该算法描述如下:设f(x,y)表示(x,y)处的像素灰度值,以(x,y)为中心、大小为(2w+1)×(2w+1)的区域S内的阈值为[1]:

在这里插入图片描述
利用T(x,y)对f(x,y)逐点二值化,得到二值化显著性图像b(x,y):

在这里插入图片描述

在这里插入图片描述

图 7 全局阈值分割结果 (a)原始图像; (b) Bernsen阈值分割结果

✳️ (2)大津法阈值插值算法与实验验证

大津法[2]也被称为最大的类间方差法,在整个图像上,根据像素值的统计特征求出阈值,是全局求阈值的最佳方案。运用大津法计算二值化阈值,方差是重要的特征量参数。实体和背景间的方差值越大,则图像前景和背景之间的差别越明显,因此,大津法确定的阈值可以使实体和背景的方差最大。

对于一个灰度图像I(x,y),将主体和背景之间的阈值设置为t,属于背景的点数和属于前景的点数分别为WB和WF,可以计算出背景点和前景点在整个图像中所占的比例ω0和ω1,其平均灰度分别为μ0和μ1;图像的总平均灰度为μ;类间方差记为varBetween。

在这里插入图片描述
假定图像背景较暗,其大小为 M × N ,把图像中像素灰度值小于阈值 t 的像素个数记作N0,大于阈值 t 的像素个数记作 N1,则有如下公式:

在这里插入图片描述

可得类间方差

在这里插入图片描述
将 t 使用穷举法执行 256 次(0~255) ,可以得出使 varBetween 取最大值的t,即为所求阈值。

在这里插入图片描述

图 8 全局阈值分割结果 (a)原始图像; (b) 大津法阈值插值值分割

✳️ (3)水线阈值(分水岭)算法与实验验证

水线阈值算法(分水岭或流域watershed)[3],分水岭算法一种以拓扑理论学习为基础的算法, 该算法归属于数学形态学算法。 分水岭算法将细胞图像中的每一个像素的灰度值作为每一个像素的海拔高度, 将细胞图像当做拓扑地貌, 该地貌属于测地学, 其中集水盆就是指细胞图像中的任何一个内部区域最小的值产生影响的地方。 与此同时, 分水岭就是根据这些地方的边缘区域产生的。 细胞分割时, 很多情况会导致过度分割的产生, 比如灰度值发生的微小变化, 这种微小变化主要是发生在物体的表面, 同时还有噪声在病变细胞图像中产生的变化,但是分水岭算法的提出, 对前面提到导致产生过分割的情况可以进行良好的解决。 分水岭算法的提出使用可以获得封闭性且具有不间断性的细胞边缘, 可以很好的将细微的细胞的边界提取出来。 除此之外, 通过对封闭性的集水盆的获取, 实现对细胞图像中一部分特点的分析, 主要是因为分水岭算法的提出对其产生了很大的作用。

在这里插入图片描述

图 9 全局阈值分割结果 (a)原始图像; (b) 分水岭算法分割结果

✳️ 2.2 基于边缘信息的分割技术

基于边缘信息的分割技术是根据区域间的灰度不连续性搜寻区域之间的边界来图像进行分割。图像中不同物体之间总是存在着灰度级别或者颜色值存在跳跃的边缘,其局部反映出不连续的特性,这相当于是一个区域的结束和相邻区域的开始,表现为垂直于边缘的方向,像素灰度变化非常明显,同时平行于边缘的方向,像素灰度变化比较缓慢。基于边缘的分割方法试图通过检测区域间的灰度不连续性搜寻区域之间的边界来决分割,它能够实现的一个主要假设是相邻区域界限的像素灰度值是存在明显的不同。实现的核心是首先用边缘检测算子对图像中可能是边缘点的像素进行判定,然后细化具有一定厚度的边缘,最后利用边缘闭合技术将边缘进行封闭,以此来对图像区域进行划分。属于此类算法的主要有局部图像函数的方法、图像滤波、基于边界曲线拟合的方法和基于多尺度方法等等。此类算法比较适用于边缘灰度值差异大且噪声小的图像,而对边缘灰度值变化小、采光差的图像则其效果并不理想,而且算法对噪声较敏感。

✳️ 2.3 基于区域处理的分割技术

基于区域处理的分割技术是一种直接寻找区域,将图像划分为不同区域的分割技术,该方法的核心是假定在视觉上,相同区域中相邻像素呈现出如灰度特征、颜色特征等类似的特征,利用图像的空间信息,认为在同一区域的像素其性质应该是相似的,这种观念相对而言较直接。

区域生长算法、分裂和合并算法是这类方法中的典型算法。特别的,区域生长算法是对每个将要分割的区域中,寻找一个作为生长点的种子像素,再基于一定的准则将该生长点附近的像素划归到生长点所在的一类中,逐步合并以形成所需要的分割区域。

✳️ 2.3.1 区域生长算法实验验证

区域生长图像分割结果如下图所示:

在这里插入图片描述

图 10 全局阈值分割结果 (a)原始图像; (b) 区域生长分割结果

✳️ 2.3.3 四叉树分解算法实验验证

四叉树分解图像分割结果如下图所示:

在这里插入图片描述

图 11 全局阈值分割结果 (a)原始图像; (b) 四叉树分解分割结果

✳️ 三、参考文献

[1] 张善文, 黄文准, 师韵. 基于改进Bernsen二值化算法的植物病害叶片病斑检测 [J]. 广东农业科学, 2016, 43(12): 129-33+2.
[2] 马海云, 张敬花. 基于阈值优化技术的古典文献文字识别算法研究 [J]. 中央民族大学学报(自然科学版), 2022, 31(03): 76-80.
[3] 徐梅. 基于阈值和分水岭算法对白细胞图像分割的研究 [D]; 哈尔滨理工大学, 2021.

✳️ 四、Matlab代码获取

上述所有实验验证结果均通过Matlab程序实现,可私信博主获取。


博主简介:研究方向涉及智能图像处理、深度学习、卷积神经网络等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法程序科研方面的问题,均可私信交流讨论


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

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

相关文章

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (5)- 自定义功能块(下)

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

logback 集成 logstash

logback 集成 logstash 相关环境参考&#xff1a; Java 输出 JSON 日志 1. 添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.2</version> </depend…

TextRank算法实践

TextRank算法实践 PageRank算法思想 TextRank算法的思想主要源于PageRank算法&#xff0c;PageRank算法主要用于给互联网网页排序&#xff0c;根据网页之间的跳转来构造一个初始权重矩阵&#xff08;转移矩阵&#xff09;&#xff0c;默认每个网页质量都是1 使用一个向量v&…

基于多目标粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

k8s使用ceph-csi插件的cephfs方式持久化存储

环境说明 操作系统&#xff1a;centos-7.9 x86_64&#xff0c;内核版本3.10.0&#xff0c;所有组件安装均在该操作系统 ceph版本&#xff1a;ceph version 14.2.22 nautilus (stable) kubernetes版本&#xff1a;v1.17.4 ceph-csi版本&#xff1a;v3.0.0 docker版本&#xff1…

【网络安全】红队攻防之基础免杀

引言 本文主要介绍“反射型dll注入”及“柔性加载”技术。 反射型dll注入 为什么需要反射型dll注入 常规的dll注入代码如下&#xff1a; int main(int argc, char *argv[]) { HANDLE processHandle; PVOID remoteBuffer; wchar_t dllPath[] TEXT("C:\\experiments\\…

Go语言学习笔记

1. 普通函数声明/定义 函数声明包括函数名、形式参数列表、返回值列表&#xff08;可省略&#xff09;以及函数体 func 函数名(形式参数列表) (返回值列表){函数体 }2. 接口定义及实现 接口定义&#xff0c;注意和上述函数声明作区分 type 接口名 interface{method1(参数列…

【语音去噪】谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

⛄一、谱减法维纳滤波卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单、去噪效果好,被公认为一种经典的去噪算法。语音信号在时域的表示为: yi( t) si( t) ni( t) ,其中si( t) 、ni( t) 和yi( t) 分别是第i帧原始语音信号、噪声和被噪声污染…

springboot反射执行private方法@Autowired字段为空

springboot反射执行private方法Autowired字段为空描述错误复现controllerserviceReflectServiceImplReflectCallServiceservice 层切面debug 结果图调用 reflectTest 方法(public反射)调用 reflectTest1方法(private反射)分析参考描述 业务代码写完之后&#xff0c;懒得写mock代…

Python基础(四):Python必需掌握基础注释、变量、输出

文章目录 Python必需掌握基础注释、变量、输出 一、注释 1、作用 2、分类及语法 3、快速体验 4、总结 二、变量 1、作用 2、定义变量 三、输出 1、格式化符号 2、体验 3、转义字符 4、结束符 Python必需掌握基础注释、变量、输出 14天学习训练营导师课程&#xf…

[附源码]计算机毕业设计JAVA汽车租赁系统

[附源码]计算机毕业设计JAVA汽车租赁系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成&#xff08;Continuous Integration&#xff0c;CI)和持续发布&#xff0…

C/C++编译器配置——MinGW下载安装

一. 前言 由于重装Win11系统&#xff0c;所有配置环境需要重装&#xff0c;对于C/C编译器MinGW配置做一个简单记录。 VS code等软件只提供编辑器&#xff0c;不提供编译器&#xff0c;因此windows系统上的C/C编译器需要通过安装MinGW实现。 二. 安装过程 在MinGW官网下载安装…

元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”

导语&#xff1a;近期李晖和风语筑团队在深度探索“虚实结合”&#xff0c;布局元宇宙&#xff0c;谋求更多的创新。他受中国移动通信联合会元宇宙产业委员会委托&#xff0c;参与研究编撰《元宇宙十大技术》&#xff0c;并为该书做序《元宇宙&#xff1a;数字技术构建美好生活…

(十)延迟队列

延迟队列1. 延迟队列概念2. 延迟队列使用场景3. 整合Springboot4. TTL队列1. 代码架构图2.MQ组件配置文件类代码3. 消息生产者代码4. 消息消费者代码5. 延时队列优化1. 代码架构图2. 配置文件类代码3. 消息生产者代码6. Rabbitmq插件实现延迟队列1.安装延时队列插件2.代码实现7…

强强联合:OpenFeign 整合 Sentinel

书接前文&#xff1a; 微服务间的远程接口调用&#xff1a;OpenFeign 的使用 当项目中使用了 OpenFeign 后&#xff0c;可以很方便的进行远程服务调用&#xff0c;现在有个问题&#xff0c;假如远程服务出现故障了&#xff0c;调不了远程的接口&#xff0c;这边又着急等着返回…

系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)

1.让计算机知道系统被放在哪个设备上了&#xff08;BIOS&#xff09; 计算机启动先启动bios&#xff0c;再去读MBR&#xff0c;MBR动了才会启动操作系统 2.让计算机知道哪里的分区是活动分区(MBR)&#xff0c;找出来把系统引导到这里来 这两部类似于早先游戏里的红色警报和星…

springcloud20:springcloudalibaba之Nacos

为什么会出现spring alibaba 整个Netflix项目进入维护模式&#xff08;不会添加新功能&#xff09; springcloud: Nerflix:eureka ribbon feign ruul config springcloud一些小技术和其整合 此时内部出问题 SpringCloud 吸收了springcloud alibaba 此时springcloud带了了什么呢…

【笔试强训】Day 3

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…

python中pytest库用法详解

Pytest 是用于测试 Python 应用的 Python 库。 官方文档&#xff1a;Full pytest documentation — pytest documentation 安装&#xff1a; pip install pytest pytest 测试发现约定规范 如果未指定任何参数&#xff0c;则在testpaths&#xff08;如果已配置&#xff09;或…