当前位置: 首页 > news >正文

OpenCv形态学(一)

目录

形态学转换

结构元素

腐蚀

膨胀

开运算

闭运算

形态学梯度

顶帽

黑帽

图像轮廓

查找轮廓

绘制轮廓


形态学转换

·形态变换是一些基于图像形状的简单操作。通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两种基本的形态学算子是侵蚀和膨胀。然后,它的变体形式(如“打开”,“关闭”等)也开始起作用。形态变换是一些基于图像形状的简单操作。通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两种基本的形态学算子是侵蚀和膨胀。然后,它的变体形式(如“打开”,“关闭”等)也开始起作用。基本思想:使用具有一定形状的结构元素去度量和提取图像中对应的形状,以达到对图像进行处理的目的。

形态学操作图像的数学基础是集合论

集合的交集和并集

集合的补集和差集

集合的反射

集合的平移

结构元素

二值图像形态学处理的运算对象是集合

设A为像素集合,B为结构元素(本身也是一个像素集合,其元素是感兴趣目标的像素),处理过程就是用B对A进行操作。结构元素B对A的具体操作

  • 通过让B在A上平移,以便B的原点访问A的每一个元素,以此得到一个新的像素集合

    结构元素必须指定一个原点

  • 结构元素的原点就是形态学运算的参考点(当结果元素对称且未显示原点时,通常将原点假定在对称中心处)

    当对图像操作时,要求结构元素时矩形阵列(通过添加最小可能数量的背景元素组成一个矩阵阵列来实现)

    注意:形态学处理中,只考虑图像和结构元素中有效像素点,也就是只考虑感兴趣的前景部分,背景部分不予考虑

    为什么结构元素是奇数:

    旋转180°不变,反射之后还是他本身

    原点方便定位中心点

cv2.getStructuringElement(shape, ksize, anchor)

函数用于返回一个指定形状和尺寸的结构元素,该结构元素可用于形态学操作,如腐蚀、膨胀、开运算和闭运算等。其语法参数说明:

  • shape:表示结构元素的形状,可以是以下几种取值:

  • cv2.MORPH_RECT:矩形结构元素

  • cv2.MORPH_CROSS:十字形结构元素

  • cv2.MORPH_ELLIPSE:椭圆形结构元素

  • ksize:表示结构元素的大小

  • anchor:表示结构元素的锚点位置,默认为(-1,-1),表示结构元素的中心

在图像处理中,使用cv2.getStructuringElement函数创建结构元素时,将ksize参数设置为奇数有以下几个原因:

  • 对称性:奇数尺寸的结构元素具有对称性,这在一些形态学操作中是很重要的。例如,在腐蚀和膨胀操作中,使用对称的结构元素可以确保操作的结果在图像的不同位置上具有相似的效果。

  • 中心性:奇数尺寸的结构元素有一个明确的中心像素。这个中心像素在形态学操作中起着重要的作用,例如在腐蚀操作中

  1. 边界处理的便利性:在处理图像边界时,奇数尺寸的结构元素可以更方便地处理边界像素。对于奇数尺寸,能够以更对称和一致的方式处理靠近图像边缘的部分,减少边界效应带来的不一致性。

  2. 更好的局部特征提取:在一些应用中,奇数尺寸的结构元素可以更准确地捕捉图像的局部特征。这是因为其中心像素能够更精确地定位在目标区域内,从而对局部结构的描述更加准确。

  3. 数学计算的简洁性:在某些形态学运算的数学实现中,奇数尺寸的结构元素可能会使计算更加简洁和高效,减少计算过程中的复杂性和可能出现的错误。

腐蚀

.Common Names: Erode, Shrink, Reduce(常用名称:腐蚀,侵蚀,收缩,减少)。侵蚀是数学形态学领域的两个基本算子之一,另一个是膨胀算子。

·侵蚀通常适用于二值图像,但也有适用于灰度图像的版本。算子对二值图像的基本作用是侵蚀掉前景像素(即白色像素)区域的边界。因此,前景像素的区域缩小了。

效果:缩小图像中的物体

定义:假设A是原始的二值图像,B是结构元素,则A被B腐蚀的定义为:将结构元素B相对于集合A进行平移,只要平移后结构元素都包含在集合A中,则这些位移Z的点(前景像素点)的集合即为腐蚀后的结果

def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):

  • src:输入图像,可以是多通道图像,深度应为CV_8UCV_16UCV_16SCV_32FCV_64F之一。

  • dst:输出与输入图像相同大小和类型的图像。

  • kernel:用于腐蚀的结构元素。如果kernel=Mat(),则使用3x3矩形结构元素。可以使用getStructuringElement()函数创建内核。

  • anchor:锚点在元素内的位置,默认值为(-1,-1),表示锚点位于元素中心。

  • iterations:腐蚀的次数,默认值为1。

  • borderType:像素外推方法,可选项包括BORDER_CONSTANTBORDER_REPLICATE等。

  • borderValue:边界不变的边界值。

腐蚀的过程

 eg:去掉两个物体之间连接的细线

im=np.zeros((200,200),np.uint8)
im[20:23,20:23]=255# 获取一个3*3的结构元素
# 第一个参数:结果元素的形状,矩阵还是十字型
# 第二个参数:结构元素的大小
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
dst=cv2.erode(im,kernel)
cv2.imshow("im",im)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

用3*3的卷积核腐蚀3*3的矩阵(原图--右,效果图--左)

膨胀

·效果:扩大图像中的物体,在二值图中扩大白色的部分,收缩黑色的部分

·定义:假设A是原始的二值图像,B是结构元素,则A被B膨胀的定义为:

又被定义为:

也就是,A被B膨胀的结果是满足上面公式的所有位移z的点(前景像素点)的集合。

dilation = cv.dilate(img,kernel,iterations =1)

  • img:要进行膨胀操作的输入图像。

  • kernel:用于膨胀操作的结构元素,通常通过 cv2.getStructuringElement 函数获取。

  • iterations:膨胀操作的迭代次数。默认值为 1,表示执行一次膨胀操作。如果设置为大于 1 的值,则会连续执行指定次数的膨胀操作,使得膨胀效果更加强烈。

开运算

效果: 断开较窄的粘连线,消除较细的突出物和噪音,使图像的轮廓变得光滑(去除白点)

定义: 假设A是原始的二值图像,B是结构元素,则A被B开运算的定义为:

也就是,先用B对A继续腐蚀,然后再用B对腐蚀的结果进行膨胀

opening = cv2.morphologyEx(img, cv.MORPH_OPEN, kernel)

 

闭运算

效果:关闭前景对象内部的小孔或对象上的小黑点时很有用。使图像的

轮廓变得光滑(去除黑点)

定义:假设A是原始的二值图像,B是结构元素,则A被B闭运算的定义

为:   先用B对A继续膨胀,然后再用B对膨胀的结果进行腐蚀

closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

形态学梯度

效果:

图像边界提取

·定义:假设A是原始的二值图像,B是结构元素,则定义为:

也就是,腐蚀的部分

·gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)

示例:获取图像边界

import cv2
im = cv2.imread("grad.png")
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
im2 = cv2.morphologyEx(im, cv2.MORPH_GRADIENT, kernel)
cv2.imshow("im", im)
cv2.imshow("gradient", im2)
# cv2.imshow("im3", im3)
cv2.waitKey(0)
cv2.destroyAllWindows()

顶帽

顶帽是输入图像和图像开运算之差

  • tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)

    细小结构。因此,顶帽运算能够突出原始图像中比周围环境更亮的区域

    或者斑点,有助于分离出这些亮区域,比如寻找图像中的亮点物体或者

    高亮细节。这对于背景相对均匀而前景目标较亮的图像特别有用,例如,

    在医学成像或文本识别中强调局部高亮区域。(找小白点)

  • ·开运算由先腐蚀后膨胀组成,能够去除图像中的小亮点(比如噪声)

黑帽

     是输入图像和图像闭运算之差

  • blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT,kernel)

    闭运算由先膨胀后腐蚀组成,能够填充图像中的小暗点和细小缝隙。因此,黑帽运算能突出显示原始图像中比周围环境更暗的区域或者斑块,有助于发现图像中的暗区域或者阴影部分,对于背景去除或者凸显图像中的暗结构非常有效。在一些应用场景下,如检测路面坑洞或寻找图像中的暗色目标时非常有用。

图像轮廓

图像轮廓是具有相同颜色或灰度的连续点的曲线,轮廓在形状分析和物

体的检测和识别中很有用。

·轮廓的作用:

    -图形分析-物体的检测和识别

.注意点:

函数返回两个值:轮廓列表 contours 和轮廓的层次结构 hierarchy

.Mode查找轮廓的模式:

RETR EXTERNAL=0这是最简单的检索模式,只检索最外层的轮廓,即不包括任何嵌套轮廓。如果你只关心物体的外部边界,而不考虑其内部结构或孔洞,这个模式就很适用。

RETR LIST=1该模式检索所有轮廓,并将其作为列表返回,但不创建任何层次结构。每个轮廓都是独立的,没有父子关系信息。适用于需要所有轮廓但不需要它们之间关系的场景。

RETR CCOMP =2在这种模式下,检索到的轮廓被组织成两层层次结构。顶层是外部边界,第二层是孔和内部边界。如果一个对象内有多个孔,则孔被视为同一层级。这对于需要区分外边界和内部孔洞的场景很有用。

RETR_TREE =3这是最复杂的检索模式,构建了一个完整的轮廓层次树。每个轮廓都有一个层次信息,可以区分出父轮廓和子轮廓(内部轮廓),非常适合于需要分析复杂结构和多级嵌套轮廓的场景。(常用这个)

  • 需要先对图像进行二值化处理

  • 画轮廓会修改原始图像,如果后面像继续使用原始图像,应该设置原始图像副本

  • 查找轮廓

    findContours(image, mode, method[, contours[,hierarchy[ offset]]]) -> contours, hierarchy

    图片只能是单通道u8的

    cv2.findContours 函数用于在二值图像中查找轮廓,其参数如下:

  • image:输入的 8 位单通道图像,可以是二值图像。

  • mode:轮廓的检索模式,常见的取值有:

  • cv2.RETR_EXTERNAL:只检测最外层轮廓。

  • cv2.RETR_LIST:检测所有轮廓,不建立层次关系。

  • cv2.RETR_CCOMP:检测所有轮廓,并将其组织为两层的层次结构。

  • cv2.RETR_TREE:检测所有轮廓,并重建完整的层次结构。

  • method:轮廓的近似方法,常见的取值有:

  • cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。

  • cv2.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线段,只保留其端点。

  • 函数返回两个值:轮廓列表 contours 和轮廓的层次结构 hierarchy

    .Mode查找轮廓的模式:

    RETR EXTERNAL=0这是最简单的检索模式,只检索最外层的轮廓,即不包括任何嵌套轮廓。如果你只关心物体的外部边界,而不考虑其内部结构或孔洞,这个模式就很适用。

    RETR LIST=1该模式检索所有轮廓,并将其作为列表返回,但不创建任何层次结构。每个轮廓都是独立的,没有父子关系信息。适用于需要所有轮廓但不需要它们之间关系的场景。

    RETR CCOMP =2在这种模式下,检索到的轮廓被组织成两层层次结构。顶层是外部边界,第二层是孔和内部边界。如果一个对象内有多个孔,则孔被视为同一层级。这对于需要区分外边界和内部孔洞的场景很有用。

    RETR_TREE =3这是最复杂的检索模式,构建了一个完整的轮廓层次树。每个轮廓都有一个层次信息,可以区分出父轮廓和子轮廓(内部轮廓),非常适合于需要分析复杂结构和多级嵌套轮廓的场景。(常用这个)

    findContours(image, mode, method[, contours[,hierarchy[,offset]]]) -> contours(轮廓), hierarchy(层级)

    ·Method:

  • CHAIN APPROX NONE=1:轮廓中的每一点都会被精确保存下来

  • CHAIN APPROX SIMPLE = 2: 仅保留轮廓的端点和具有拐角的点来简化轮廓表示

绘制轮廓

drawContours(image, contours, contourldx, color[, thickness[,lineType[,hierarchy[,maxLevel[, offset]]]]]) -> image

  • Image 要绘制的轮廓图像

  • Contours 轮廓点

  • contourldx 要绘制的轮廓编号,-1表示绘制所有轮廓,0是最外层,1是内层

    :Color: 轮廓的颜色

  • Thickness:线宽,-1表示填充

代码示例:绘制左图中的所有边框轮廓

import cv2im = cv2.imread("p1.png")
im_orgin = im.copy()
im1 = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)# 查找轮廓
contours, _ = cv2.findContours(im1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 绘制轮廓cv2.drawContours(im, contours, -1, (0, 0, 255), 2, cv2.LINE_AA)
cv2.imshow("im_orgin", im_orgin)
cv2.imshow("im", im)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

OpenCv形态学(一)

目录 形态学转换 结构元素 腐蚀 膨胀 开运算 闭运算 形态学梯度 顶帽 黑帽 图像轮廓 查找轮廓 绘制轮廓 形态学转换 形态变换是一些基于图像形状的简单操作。通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性…...

CSS基础汇总

CSS 1. 选择器 标签选择器 通过标签名找标签(把指定的样式应用到某一个、组、类标签上) id选择器 通过id属性值找标签,关键符号#id值{样式} 复合选择器 1、并列选择器:关键符号,用法:选择器1&#xff0c…...

cocos creator让所有button点击时播放音效

原理: 利用prototype属性,通过重写 cc.Button.prototype._onTouchEnded 方法,以便在按钮被点击时播放音频。通过重写其 _onTouchEnded 方法,可以添加自定义行为,如播放音频。 概念解释: prototype&#…...

mybatisplus自带的雪花算法(IdType.ASSIGN_ID)无法自动生成弊端缺点,以及改进方法

前言 今日在使用mybatisplus的雪花算法自动给id赋值时发现怎么都是null的情况,这尼玛测了半天,终于发现巨坑,废话不多说,直接上干货 IService.save 只有调用IService中的save方法才能正常生成id,像IService.saveBatc…...

单位转换:将kb转换为 MB ,GB等形式

写法一&#xff1a; function formatSizeUnits(kb) {let units [KB, MB, GB, TB, PB,EB,ZB,YB];let unitIndex 0;while (kb > 1024 && unitIndex < units.length - 1) {kb / 1024;unitIndex;}return ${kb.toFixed(2)} ${units[unitIndex]}; } console.log(for…...

优思学院|「按计划推动型」与「需求拉动型」的生产模式

针对生产架构做对比分类的用语&#xff0c;主要有按计划推进型与需求拉动型。 「按计划推动型」与「需求拉动型」两者乃是生产架构上常使用、成对比的两个用语。不过&#xff0c;有时不只用来指单纯的生产现场架构&#xff0c;也有人把它应用在更广泛的生产架构设计上。 按计划…...

解释什么是lambda函数?它有什么好处?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

码农:如何快速融入团队

问题&#xff1a; 码农如何快速融入团队&#xff1f; 记住一个标准&#xff1a;能干事、能抗事。 总结一个字&#xff1a; 靠谱。 适用范围&#xff1a;新手码农、老司机码农、测试、DBA、运维、产品经理、项目经理、架构师、技术专家、。。。。适用于任何行业的打工者。 下面要…...

Android 通知组

一. 通知组简介 从 Android 7.0&#xff08;API 级别 24&#xff09;开始&#xff0c;您可以在一个组中显示相关通知。如下所示: 图 1. 收起&#xff08;顶部&#xff09;和展开&#xff08;底部&#xff09;的通知组。 注意 &#xff1a;如果应用发出 4 条或更多条通知且未…...

【机器学习】ChatTTS:开源文本转语音(text-to-speech)大模型天花板

目录 一、引言 二、TTS&#xff08;text-to-speech&#xff09;模型原理 2.1 VITS 模型架构 2.2 VITS 模型训练 2.3 VITS 模型推理 三、ChatTTS 模型实战 3.1 ChatTTS 简介 3.2 ChatTTS 亮点 3.3 ChatTTS 数据集 3.4 ChatTTS 部署 3.4.1 创建conda环境 3.4.2 拉取源…...

宏集物联网工控屏通过 S7 ETH 协议采集西门子 1200 PLC 数据

前言 为了实现和西门子PLC的数据交互&#xff0c;宏集物联网HMI集成了S7 PPI、S7 MPI、S7 Optimized、S7 ETH等多个驱动来适配西门子200、300、400、1200、1500、LOGO等系列PLC。 本文主要介绍宏集物联网HMI如何通过S7 ETH协议采集西门子1200 PLC的数据&#xff0c;文中详细介…...

C语言学习记录(十一)——指针基本知识及运算

文章目录 前言1. 指针的概念2.指针变量的说明3. 指针的含义4. 指针运算①指针加减&#xff1a;②指针的关系运算符 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 1. 指针的概念 在C语言中&…...

Oracle中 ROW_NUMBER()的语法及在对应不同需求下应如何使用

Oracle数据库中的ROW_NUMBER()函数是一个窗口函数&#xff0c;它为查询结果集中的每一行分配一个唯一的序号。这个函数在数据分析、分页查询、数据去重和排名问题等方面非常有用。ROW_NUMBER()函数的语法如下&#xff1a; ROW_NUMBER() OVER ( [ PARTITION BY column ] ORDER …...

德邦快递大件可以寄2米长物品吗?大件跨省行李用哪个快递便宜?

搬家或寄送特殊尺寸物品时&#xff0c;快递的选择尤为关键。特别是2米长的大件物品&#xff0c;是否能够承运&#xff1f;哪家快递在跨省大件行李方面更经济&#xff1f;今天&#xff0c;就为你解答这些疑问。 1、祺祺寄快递小程序&#xff1a; “祺祺寄快递”小程序&#xff…...

C# 在WPF .net8.0框架中使用FontAwesome 6和IconFont图标字体

文章目录 一、在WPF中使用FontAwesome 6图标字体1.1 下载FontAwesome1.2 在WPF中配置引用1.2.1 引用FontAwesome字体文件1.2.2 将字体文件已资源的形式生成 1.3 在项目中应用1.3.1 使用方式一&#xff1a;局部引用1.3.2 使用方式二&#xff1a;单个文件中全局引用1.3.3 使用方式…...

万能自定义预约小程序源码系统 适合任何行业在线预约报名 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;线上预约已成为各行各业不可或缺的一部分。为满足广大企业和个人对在线预约系统的需求&#xff0c;我们特别推出了这款“万能自定义预约小程序源码系统”。该系统以其高度的灵活性和可扩展性&#xff0c;为各行各业提供了完美的在线预约…...

【MySQL备份】mysqldump篇

目录 1.简介 2.基本用途 3.命令格式 3.1常用选项 3.2常用命令 4.备份脚本 5.定时执行备份脚本 1.简介 mysqldump 是 MySQL 数据库管理系统的命令行实用程序&#xff0c;用于创建数据库的逻辑备份。它能够导出数据库的结构&#xff08;如表结构、视图、触发器等&#xf…...

控制台扫雷(C语言实现)

目录 博文目的实现思路项目创建文件解释 具体实现判断玩家进行游戏还是退出扫雷棋盘的确定地图初始化埋雷玩家扫雷的实现雷判断函数 源码game.cgame.h扫雷.c 博文目的 相信不少人都学习了c语言的函数&#xff0c;循环&#xff0c;分支那我们就可以写一个控制台的扫雷小游戏来检…...

操作系统期末复习 | 批处理程序 | PV实现同步互斥 | 调度算法 | 页面置换算法 | 磁盘调度算法

操作系统引论 批处理程序 单道批处理&#xff1a;引入脱机输入/输出技术&#xff0c;并由监督程序负责控制作业的输入、输出。主要优点是缓解了一定程度的人机速度矛盾&#xff0c;资源利用率有所提升。主要缺点是内存中仅能有一道程序运行&#xff0c;只有该程序运行结束之后…...

字符串的六种遍历方式

在 Java 中&#xff0c;有多种遍历字符串的方法。以下是几种常见的遍历字符串的方法&#xff0c;并附有示例代码 1. 使用 for 循环 这是最常见和基础的遍历方法&#xff0c;通过索引访问每个字符。 public class StringTraversal {public static void main(String[] args) {S…...

在码云(Gitee)上建立分支(Branch)的步骤如下:

步骤一&#xff1a;登录码云 首先&#xff0c;打开码云的官方网站&#xff08;gitee.com&#xff09;&#xff0c;输入用户名和密码登录你的账号。 步骤二&#xff1a;创建仓库 登录后&#xff0c;在页面右上方的搜索框中输入仓库名称&#xff0c;并点击“创建”按钮创建新的仓…...

JVM专题四:JVM的类加载机制

Java中类的加载阶段 类加载 Java中的类加载机制是Java运行时环境的一部分&#xff0c;确保Java类可以被JVM&#xff08;Java虚拟机&#xff09;正确地加载和执行。类加载机制主要分为以下几个阶段&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;这个阶段&#x…...

Python爬取中国天气网天气数据.

一、主题式网络爬虫设计方案 1.主题式网络爬虫名称 名称&#xff1a;Python爬取中国天气网天气数据 2.主题式网络爬虫爬取的内容与数据特征分析 本次爬虫主要爬取中国天气网天气数据 3.主题式网络爬虫设计方案概述&#xff08;包括实现思路与技术难点&#xff09; reques…...

EXCEL快速填充空白内容

** EXCEL快速填充空白内容 ** 1.全选所有需要填充的内容&#xff0c;按住电脑的F5或者CTRLG点击定位 2.可以看到空白处被自动选定&#xff0c;之后按电脑和⬆&#xff0c;最后CTRLenter 可以看到空白处已经被填充。...

CBSD创建和管理bhyve容器Ubuntu@FreeBSD

bhyve介绍&#xff1a;bhyve&#xff1a;FreeBSD下的原生虚拟机管理器_freebsd 虚拟化平台bhyve-CSDN博客 两个bhyve的管理软件&#xff1a;使用bvm管理bhyve虚拟机管理系统FreeBSD-CSDN博客 vm-bhyve&#xff1a;bhyve虚拟机的管理系统FreeBSD-CSDN博客 现在&#xff0c;我…...

STM32开发实战:SPI接口在W25Q64 Flash存储器中的应用

摘要 本文将深入探讨STM32微控制器如何利用SPI接口与W25Q64 Flash存储器进行通信。W25Q64是一款常用的SPI串行Flash存储器&#xff0c;具有8Mbit的存储容量。本教程将指导读者完成硬件连接、SPI配置、读写操作&#xff0c;并提供实际的代码实现。 1. SPI接口概述 SPI是一种串…...

python一些进阶用法:hook 钩子函数以及Registry机制

写在前面 一句话讲&#xff0c;register机制 和 hook 都是函数/类 调用和传参机制的一种灵活运用&#xff0c;将函数作为传参对象&#xff0c;进行回调和封装&#xff0c;通常扩展了或修改了原始函数的行为&#xff1b;这些高级用法都是编程经验中沉淀下来的常用范式&#xff0…...

工作实践:11种API性能优化方法

一、索引优化 接口性能优化时&#xff0c;大家第一个想到的通常是&#xff1a;优化索引。 确实&#xff0c;优化索引的成本是最小的。 你可以通过查看线上日志或监控报告&#xff0c;发现某个接口使用的某条SQL语句耗时较长。 此时&#xff0c;你可能会有以下疑问&#xff…...

正版软件 | WIFbox:智能化文件管理工具,让效率与隐私并行

在数字化办公日益普及的今天&#xff0c;文件管理成为了提升工作效率的关键。WIFbox 一款智能文件管理工具&#xff0c;利用强大的人工智能技术&#xff0c;帮助您快速对文件进行分类&#xff0c;完成复杂的智能文件分类任务。 智能分类&#xff0c;效率倍增 WIFbox 通过精细化…...

Postman接口工具实战

为了更好地展示Postman接口测试的实战过程&#xff0c;我将以一个简单的实战示例来说明如何使用Postman完成一个API的测试。假设我们要测试一个假想的天气查询API&#xff0c;该API允许用户通过城市名查询天气情况。我们将执行以下步骤&#xff1a; 1. 准备工作 确保已经安装…...

江协科技51单片机学习- p17 定时器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

【D3.js in Action 3 精译】前言

早在 2017 年&#xff0c;我还是一名渴望迈出职业生涯关键一步的前端开发者。虽然我很热衷于网站开发&#xff0c;但总感觉缺了点什么。我一直希望自己的工程专业背景和对教学的热爱能与新的编程技能相结合。就在这时&#xff0c;搭档建议我学学数据可视化。出于某种原因&#…...

Java SE入门及基础(58) 并发 进程与线程概念

目录 并发 进程和线程 1. 进程和线程 2. 进程 3.线程 总结 并发 并发(Concurrency) Computer users take it for granted that their systems can do more than one thing at a time. They assume that they can continue to work in a word processor, while other app…...

放松一下,简简单单了

哈哈哈哈哈...

【智能制造-5】数采和电机

既然可以采集PLC的数据&#xff0c;为什么要采集电机的数据&#xff1f; 采集PLC&#xff08;可编程逻辑控制器&#xff09;的数据和采集电机的数据是两个不同的概念和目的。 PLC是用于控制和监控工业自动化过程的设备&#xff0c;它可以接收传感器的输入信号并根据预设的逻辑…...

【软考论文】论信息系统的安全性与保密性设计

目录 一、题目二、论文2.1 摘要2.2 正文三、扩展3.1 信息安全包括5个基本要素3.2 国产秘钥算法3.3 等保(信息安全等级保护)3.4 其他一、题目 在企业信息化推进的过程中,需要建设许多信息系统,这些系统能够实现高效率、低成本的运行,为企业提升竞争力。但在设计和实现这些…...

【图文教程】电脑查看显卡GPU温度方法:小白也能秒懂!

在电脑操作中&#xff0c;显卡是电脑的重要组件之一&#xff0c;其温度控制对于保持系统稳定运行是特别重要的。但是&#xff0c;许多新手用户不知道要怎么操作才能查看电脑显卡CPU的温度&#xff1f;接下来小编给大家介绍三种简单有效的查看显卡温度方法&#xff0c;操作简单&…...

Qt的智能终端项目文档完整版

由于上一篇文章已经把用户端的页面都显示了&#xff0c;这里就不在赘述&#xff0c;就将那个运行在虚拟机上的截图展示下来了&#xff0c;其实这个也就是最后的效果了。目前就是这个&#xff0c;感觉当练手的也还行...

SQL面试题练习 —— 查询最近一笔有效订单

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;字节跳动。 1 题目 现有订单表t_order&#xff0c;包含订单ID&#xff0c;订单时间,下单用户&#xff0c;当前订单是否有效&#xff0c;请查询出每个用户每笔订单的上一笔有效订单 ----------------------------------------…...

分享HTML显示2D/3D粒子时钟

效果截图 实现代码 线上体验&#xff1a;three.jscannon.js Web 3D <!DOCTYPE html> <head> <title>three.jscannon.js Web 3D</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width,ini…...

Java——IDEA使用

一、IDEA介绍 IntelliJ IDEA 是 JetBrains 公司开发的一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于 Java 编程语言&#xff0c;但也支持多种其他语言和框架。由于其强大的功能和灵活性&#xff0c;IntelliJ IDEA 被广泛应用于软件开发领域&…...

高性能STL库 EASTL 、高性能JSON库

GitHub - electronicarts/EASTL: EASTL stands for Electronic Arts Standard Template Library. It is an extensive and robust implementation that has an emphasis on high performance. 兄弟们&#xff0c;对STL要求性能高的可以试试这个EASTL库&#xff01;&#xff01…...

多通道采集器采样接口设计[进行中...]

1.技术问题 这是一个非常小的设计&#xff0c;完全不值得把它展示出来。但是因为这个接口设计关系到一些细微的配置和技术限制&#xff0c;仍然有一些细节需要处理&#xff0c;并且很容易出错&#xff0c;我们先把技术问题罗列一下&#xff1a; 多个传感器对应的多个逻辑通道…...

rapidjson使用中crash问题分析

问题 在使用rapidjson时&#xff0c;使用Document的Parse方法解析json字符串&#xff0c;程序crash。 分析 可以参考https://github.com/Tencent/rapidjson/issues/1269&#xff0c;由于rapidjson的内存分配器默认认为内存分配成功&#xff0c;没有对分配后做判空判断&#…...

TCP协议中的三次握手和四次挥手机制

TCP协议中的三次握手和四次挥手机制 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的通信协议&#xff0c;它的三次握手和四次挥手机制是建立和断开连接的关键步骤。 三次握手&#xff1a; 第一次…...

Linux双网卡默认路由的metric设置不正确,导致SSH连接失败问题定位

测试环境 VMware虚拟机 RockyLinux 9 x86_64 双网卡&#xff1a;eth0(访问外网): 10.206.216.92/24; eth1(访问内网) 192.168.1.4/24 问题描述 虚拟机重启后&#xff0c;SSH连接失败&#xff0c;提示"Connection time out"&#xff0c;重启之前SSH连接还是正常的…...

Batch入门学习:从零开始掌握批处理脚本

目录 1. Batch脚本简介 1.1 什么是Batch脚本&#xff1f; 1.2 Batch脚本的历史 1.3 Batch脚本的应用场景 2. Batch脚本基本语法 2.1 注释 2.2 变量 2.3 常用命令 2.3.1 ECHO 2.3.2 PAUSE 2.3.3 CLS 2.3.4 GOTO 2.3.5 IF 2.3.6 FOR 2.4 参数传递 2.5 输入输出重…...

diffusion model(十八):diffusion model中negative prompt的工作机制

info个人博客主页http://myhz0606.com/article/ncsn 前置阅读&#xff1a; DDPM&#xff1a; http://myhz0606.com/article/ddpm classifier-guided&#xff1a;http://myhz0606.com/article/guided classifier-free guided&#xff1a;http://myhz0606.com/article/classi…...

Python | Leetcode Python题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution:def dfs(self, grid, r, c):grid[r][c] 0nr, nc len(grid), len(grid[0])for x, y in [(r - 1, c), (r 1, c), (r, c - 1), (r, c 1)]:if 0 < x < nr and 0 < y < nc and grid[x][y] "1":self.d…...

利用圆上两点和圆半径求解圆心坐标

已知圆上两点P1&#xff0c;P2&#xff0c;坐标依次为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1​,y1​),(x2​,y2​)&#xff0c;圆的半径为 r r r&#xff0c;求圆心的坐标。 假定P1&#xff0c;P2为任意两点&#xff0c;则两点连成线段的中点坐标是 x m i …...