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

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

在这里插入图片描述
在这里插入图片描述

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

  • 一、前言
  • 二、滤波:图像的精细化处理​
    • 2.1 滤波基础概念​
      • 2.1.1 滤波的本质​
      • 2.1.2 图像噪声来源与类型​
    • 2.2 线性滤波​
      • 2.2.1 均值滤波​
      • 2.2.2 高斯滤波​
    • 2.3 非线性滤波​
      • 2.3.1 中值滤波​
  • 三、边缘检测:图像轮廓的精准捕捉​
    • 3.1 边缘的内涵与意义​
      • 3.1.1 边缘的定义​
      • 3.1.2 边缘检测的重要性​
    • 3.2 经典边缘检测算法​
      • 3.2.1 梯度算子​
      • 3.2.2 Canny 边缘检测算法​
  • 四、形态学操作:基于形状的图像雕琢​
    • 4.1 形态学操作基础概念​
      • 4.1.1 形态学操作的基本思想​
      • 4.1.2 结构元素的选择与影响​
    • 4.2 膨胀与腐蚀​
      • 4.2.1 膨胀​
      • 4.2.2 腐蚀​
    • 4.3 开运算与闭运算​
      • 4.3.1 开运算​
      • 4.3.2 闭运算​
  • 五、总结​
  • 致读者一封信

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作,计算机视觉是人工智能领域的核心方向之一,旨在让计算机具备理解和解释视觉信息的能力。而图像处理则是计算机视觉的基石,为后续的特征提取、目标识别、图像分割等高级任务提供数据基础。滤波、边缘检测与形态学操作作为图像处理的基础环节,各自发挥着独特且关键的作用。滤波用于改善图像质量,去除噪声或增强特定特征;边缘检测聚焦于提取图像中物体的轮廓信息;形态学操作则基于图像形状对其进行优化与处理。深入理解这些基础技术,对于掌握计算机视觉的核心知识体系至关重要。

在这里插入图片描述

一、前言

        计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。


👉👉👉 🥇 点击进入计算机视觉专栏,计算机视觉(CV)是人工智能的重要分支,致力于让机器通过数字图像或视频获取、处理和分析视觉信息,并模拟人类视觉的认知能力。本专栏涵盖基础概念、技术应用、前沿研究和实战案例等方向。

👉👉👉 🥇 点击进入计算机网络技术专栏,本专栏旨在深入探讨计算机网络的核心概念、关键技术、协议标准以及最新发展趋势,帮助读者全面理解网络通信的原理与实践。

👉👉👉 🥇 点击进入网络安全知识专栏,本专栏详细介绍了网络安全入门:理解基本概念和术语,网络安全的五大核心领域:防护、检测、响应、恢复与治理,常见的网络攻击类型及防范技巧,网络安全防护层次:从物理到应用的多重保障,企业网络安全的十大挑战及解决方案等。

二、滤波:图像的精细化处理​

2.1 滤波基础概念​

2.1.1 滤波的本质​

    滤波在数学上是一种卷积运算,它通过将一个滤波器(也称为卷积核)应用于图像,对图像的像素值进行加权求和,从而改变图像的像素值分布。从信号处理的角度看,图像可视为二维信号,滤波操作能够有针对性地修改信号的频率成分。低频成分通常对应图像的平滑区域,高频成分则与图像的细节和边缘相关。通过设计不同的滤波器,可以实现去除噪声(抑制高频噪声信号)、增强边缘(突出高频信号)等多种功能。​

2.1.2 图像噪声来源与类型​

    图像噪声是影响图像质量的关键因素之一。常见的噪声来源包括图像采集设备的电子干扰(如相机传感器的热噪声)、传输过程中的信号干扰等。主要的噪声类型有:​

    高斯噪声:其概率密度函数服从高斯分布,是由于电子设备的热噪声等产生的。在图像中表现为随机分布的灰度值波动,类似 “雪花” 效果。​

    椒盐噪声:又称脉冲噪声,图像中会随机出现黑白相间的噪声点,像撒在图像上的 “椒盐”,通常是由于图像传输错误或传感器故障引起。​

2.2 线性滤波​

2.2.1 均值滤波​

    原理:均值滤波是一种简单直观的线性滤波方法。以每个像素为中心,选取一个固定大小的邻域(如 3×3、5×5 等),计算邻域内所有像素的平均值,并用该平均值替换中心像素的值。例如,对于一个 3×3 的邻域:​
在这里插入图片描述
    中心像素在这里插入图片描述经过均值滤波后的新值为在这里插入图片描述

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
# 读取图像​
image = cv2.imread('input_image.jpg')​
​
# 定义3x3均值滤波核​
kernel = np.ones((3, 3), np.float32) / 9​
​
# 进行均值滤波​
filtered_image = cv2.filter2D(image, -1, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Mean Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    效果与局限性:均值滤波能有效去除高斯噪声,使图像变得平滑。然而,它会模糊图像边缘,因为在计算平均值时,将边缘像素与邻域内的非边缘像素同等对待,导致边缘信息丢失。​

2.2.2 高斯滤波​

    原理:高斯滤波同样基于邻域像素的加权平均,但权重依据高斯分布确定。距离中心像素越近的像素,权重越大;距离越远,权重越小。高斯滤波核的计算公式为:​
在这里插入图片描述

    其中,σ是高斯分布的标准差,控制高斯核的平滑程度。σ越大,高斯核的范围越广,对图像的平滑效果越强。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg')​
​
# 使用OpenCV的高斯滤波函数,设置sigmaX和sigmaY​
filtered_image = cv2.GaussianBlur(image, (5, 5), 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Gaussian Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()


    优势:相比均值滤波,高斯滤波在去除噪声的同时能更好地保留图像边缘细节。这是因为其加权方式更符合图像的自然特性,对边缘附近像素的处理更合理,不会像均值滤波那样过度平滑边缘。​

2.3 非线性滤波​

2.3.1 中值滤波​

    原理:中值滤波属于非线性滤波。以每个像素为中心选取邻域,将邻域内的像素值排序,取中间值作为中心像素的新值。例如,对于邻域[3,5,1,9,7] ,排序后为[1,3,5,7,9] ,中值为 5,中心像素将被替换为 5。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg')​
​
# 使用OpenCV的中值滤波函数​
filtered_image = cv2.medianBlur(image, 5)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Median Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    效果特点:中值滤波对椒盐噪声有极佳的抑制效果。由于它不是基于像素值的平均,而是选取中间值,所以能有效避免噪声点对滤波结果的干扰,在去除噪声的同时很好地保留图像的边缘和细节信息,这是线性滤波难以企及的。​

三、边缘检测:图像轮廓的精准捕捉​

3.1 边缘的内涵与意义​

3.1.1 边缘的定义​

    图像中的边缘是指图像局部区域亮度变化显著的位置,即灰度值或颜色值发生急剧变化的地方。从数学角度看,边缘处的图像灰度一阶导数具有较大幅值,或者二阶导数过零。边缘包含了物体的形状、结构等重要信息,是图像理解和分析的关键特征。​

3.1.2 边缘检测的重要性​

    在计算机视觉任务中,边缘检测为后续的目标识别、图像分割、目标跟踪等提供基础。例如,在目标识别中,通过边缘检测提取物体轮廓,有助于区分不同物体;在图像分割中,依据边缘信息可以准确划分图像中的不同区域。​

3.2 经典边缘检测算法​

3.2.1 梯度算子​

    原理:梯度算子基于图像灰度的一阶导数检测边缘。常用的有 Roberts 算子、Prewitt 算子和 Sobel 算子。以 Sobel 算子为例,它通过两个 3×3 的模板对图像进行卷积运算,一个模板用于检测水平方向的边缘,另一个用于检测垂直方向的边缘。​

    水平方向模板:​
在这里插入图片描述

    垂直方向模板:​
在这里插入图片描述


    通过计算图像在水平和垂直方向的梯度值,根据一定阈值判断是否为边缘像素。梯度值越大,灰度变化越剧烈,越可能是边缘。​

代码示例(Python + OpenCV):​

import cv2import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)  # 以灰度图读取​
​
# 使用Sobel算子计算水平方向梯度​
sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)​
sobelx = np.uint8(np.absolute(sobelx))​
​
# 使用Sobel算子计算垂直方向梯度​
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)​
sobely = np.uint8(np.absolute(sobely))​
​
# 合并水平和垂直方向梯度​
sobel_combined = cv2.bitwise_or(sobelx, sobely)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Sobel Combined', sobel_combined)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    局限性:梯度算子对噪声敏感,因为噪声也会导致图像灰度的快速变化,容易产生误检。​

3.2.2 Canny 边缘检测算法​

原理步骤:​

    高斯滤波:首先对图像进行高斯滤波,去除图像中的噪声,因为噪声可能导致错误的边缘检测。​

    计算梯度幅值和方向:使用类似 Sobel 算子的方法计算图像在各个像素点的梯度幅值和方向。​

    非极大值抑制:在得到的梯度幅值图像上,对每个像素点进行处理,只有当该像素点的梯度幅值在其梯度方向上是局部最大值时,才保留该像素点,否则将其置为 0。这一步骤细化边缘,去除因噪声或非边缘区域产生的较弱梯度响应。​

    双阈值处理和边缘连接:设置两个阈值,高阈值和低阈值。高于高阈值的像素点确定为边缘像素,低于低阈值的像素点舍弃。介于两者之间的像素点,如果与已确定为边缘的像素点相连,则保留,否则舍弃。通过这种双阈值处理和边缘连接方式,有效提取连续且准确的边缘。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
# 使用Canny边缘检测​
edges = cv2.Canny(image, 50, 150)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Canny Edges', edges)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

​    优势:Canny 边缘检测算法综合考虑了噪声抑制、边缘定位精度和边缘连续性等多方面因素,检测效果较好,在实际应用中广泛使用。​

四、形态学操作:基于形状的图像雕琢​

4.1 形态学操作基础概念​

4.1.1 形态学操作的基本思想​

    形态学操作基于图像形状进行处理,核心是使用一个结构元素(也称为核)来探测图像。通过判断结构元素能否在图像中特定位置良好放置,从而改变图像的形状和结构。结构元素的形状(如矩形、圆形、十字形等)和大小决定了形态学操作的具体效果。​

4.1.2 结构元素的选择与影响​

    不同形状和大小的结构元素对图像的处理效果差异显著。例如,矩形结构元素在水平和垂直方向上的处理较为均匀;圆形结构元素则在各方向上相对均衡;十字形结构元素对特定方向的线条等特征更为敏感。结构元素的大小决定了操作的作用范围,较大的结构元素会对图像产生更广泛、更强烈的影响,而较小的结构元素则更注重细节处理。​

4.2 膨胀与腐蚀​

4.2.1 膨胀​

    原理:膨胀是形态学操作中的基本运算,作用是扩大图像中的物体区域。对于图像中的每个像素点,如果结构元素在该像素点位置与图像有重叠部分,就将该像素点的值设为结构元素覆盖范围内的最大值(对于二值图像,即把 0 变为 1)。例如,对于简单的二值图像和 3×3 的正方形结构元素,若结构元素中心位于图像某像素点,只要结构元素覆盖区域内有一个像素值为 1,该中心像素经膨胀后就变为 1。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
# 定义3x3矩形结构元素​
kernel = np.ones((3, 3), np.uint8)​
​
# 进行膨胀操作​
dilated_image = cv2.dilate(image, kernel, iterations = 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Dilated Image', dilated_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    应用场景:膨胀操作可用于连接断裂的物体、填充物体内部的小孔、增强图像中的亮区域等。​

4.2.2 腐蚀​

    原理:腐蚀与膨胀相反,用于缩小图像中的物体区域。在腐蚀操作中,对于图像中的每个像素点,只有当结构元素在该像素点位置完全包含在图像的物体区域内(对于二值图像,即结构元素覆盖的所有像素值都为 1)时,才保留该像素点原来的值,否则将其设为 0(对于二值图像)。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((3, 3), np.uint8)​
​
# 进行腐蚀操作​
eroded_image = cv2.erode(image, kernel, iterations = 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Eroded Image', eroded_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    应用场景:腐蚀操作常用于去除图像中的噪声点、细化物体轮廓、减弱图像中的亮区域等。​

4.3 开运算与闭运算​

4.3.1 开运算​

    原理:开运算是先进行腐蚀操作,然后再进行膨胀操作。其主要作用是去除图像中的小物体、分离粘连物体、平滑物体的轮廓,同时保持物体的整体位置和形状基本不变。例如,对于一幅包含小噪声点和较大物体的图像,开运算可有效去除小噪声点,对较大物体影响较小。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((5, 5), np.uint8)​
​
# 进行开运算​
opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Opened Image', opened_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

4.3.2 闭运算​

    原理:闭运算是先进行膨胀操作,然后再进行腐蚀操作。主要用于填充物体内部的小孔、连接相邻的物体、平滑物体的轮廓,并且同样能保持物体的整体位置和形状基本不变。比如,对于一幅有小空洞的物体图像,闭运算可将这些小空洞填充。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((5, 5), np.uint8)​
​
# 进行闭运算​
closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Closed Image', closed_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

五、总结​

    滤波、边缘检测与形态学操作构成了计算机视觉图像处理基础技术的重要组成部分。滤波通过不同方式去除噪声、增强特征,为后续处理提供高质量图像;边缘检测精准提取图像中物体的轮廓,为目标识别、分割等任务奠定基础;形态学操作基于图像形状对图像进行优化,在图像分析的各个环节发挥独特作用。这些基础技术相互配合、相互补充,是深入学习计算机视觉高级算法和实现复杂应用的根基。随着技术的不断发展,这些基础操作也在不断演进和优化,以适应更复杂的图像场景和更高的应用需求。希望本文能为读者在图像处理的学习与实践中提供全面且深入的指导,助力大家在计算机视觉领域不断探索前行。

致读者一封信

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


----------- 业精于勤,荒于嬉 -----------

请添加图片描述

----------- 行成于思,毁于随 -----------

在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署;
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     ③ 🉑提供产品测评,产品推广业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://xcleigh.blog.csdn.net/article/details/146999014(防止抄袭,原文地址不可删除)

相关文章:

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作 一、前言二、滤波:图像的精细化处理​2.1 滤波基础概念​2.1.1 滤波的本质​2.1.2 图像噪声来源与类型​ 2.2 线性滤波​2.2.1 均值滤波​2.2.2 高斯滤波​ 2.3 非线性滤波​2.3.1 中值滤波​ 三…...

实用的alias别名命令——比2=1+1简单的基础命令

目录 alias命令的用处alias命令的写法让alias别名永久存在的办法下篇预告 alias命令的用处 别名,就是linux系统中的命令的别称,而alias命令,可以显示linux系统当前设定的全部别名,当然,也可以自己定义一个别名。 ali…...

JAVA单例模式

目录 一、什么是单例模式: 二、饿汉模式: 代码示例: 饿汉模式的特点: 三、懒汉模式: 正确代码示例(双重检查锁): 一、什么是单例模式: 一个类,在语法角度…...

k8s安装cri驱动创建storageclass动态类

部署nfs服务器 #所有k8s节点安装nfs客户端 yum install -y nfs-utils mkdir -p /nfs/share echo "/nfs/share *(rw,sync,no_root_squash)" >> /etc/exports systemctl enable --now nfs-serverhelm部署nfs的provisioner&sc 所有k8s节点安装客户端 yu…...

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能(CCM) 1.3 IO 复用(IOMUXC) 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程: 使能某组GPIO模块(GPIO1、2、...)&#…...

【C++11】lambda

lambda lambda表达式语法 lambda表达式本质是一个匿名函数对象,跟普通函数不同的是它可以定义在函数内部。lambda表达式语法使用层而言没有类型,所以一般是用auto或者模板参数定义的对象去接收lambda对象。 lambda表达式的格式:[capture-l…...

自旋锁(C++实现)

1 简介 自旋锁是一种典型的无锁算法,在任何时刻,它都最多只能有一个保持者。当有一个线程试图获得一个已经被占用的锁时,该线程就会一直进行循环等待,直到该锁被释放。自旋锁的优点是不会使线程状态发生切换,一直处于用…...

python基础-11-调试程序

文章目录 【README】【11】调试【11.1】抛出异常【11.1.1】抛出异常代码块 【11.2】获取回溯字符串【11.2.1】traceback获取异常回溯信息 【11.3】断言【11.3.1】断言代码示例 【11.4】日志(使用logging模块)【11.4.1】使用logging模块操作日志【11.4.3】…...

我的创作历程:从不情愿到主动分享的成长

🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 二、转变:从被动到主动的心路历程 三、挑战:时间的压力与写作的坚持 四、收获:分享与成长 五、展望…...

uniapp地图导航及后台百度地图回显(v2/v3版本)

百度地图申请地址&#xff1a;控制台 | 百度地图开放平台 效果&#xff1a; 1.后台 1.1申请百度地图APi 1.2 引入百度地图 <script type"text/javascript" src"//api.map.baidu.com/api?v3.0&ak自己百度生气apikey"></script> 1.3 v2组…...

多layout 布局适配

安卓多布局文件适配方案操作流程 以下为通过多套布局文件适配不同屏幕尺寸/密度的详细步骤&#xff0c;结合主流适配策略及最佳实践总结&#xff1a; 一、‌创建多套布局资源目录‌ ‌按屏幕尺寸划分‌ 在 res 目录下创建以下文件夹&#xff08;根据设备特性自动匹配&#xff…...

马斯克 AI 超算

超算建设情况&#xff1a;马斯克旗下人工智能初创公司 xAI 正在田纳西州孟菲斯市建造世界上最大的超级计算机2。自 2024 年 6 月首次宣布这笔工程以来&#xff0c;xAI 已向当地规划和发展机构提交了 14 份施工许可申请&#xff0c;合计代表了 4.059 亿美元的预计项目成本2。该超…...

大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)

一、说明简介 ‌DeepSeek Janus-Pro‌是一款先进的多模态理解和生成模型&#xff0c;旨在实现高质量的文本-图像生成与多模态理解。它是由DeepSeek团队研发的&#xff0c;是之前Janus模型的升级版&#xff0c;能够同时处理文本和图像&#xff0c;即可以理解图片内容&#xff0c…...

《AI大模型应知应会100篇》第3篇:大模型的能力边界:它能做什么,不能做什么

第3篇&#xff1a;大模型的能力边界&#xff1a;它能做什么&#xff0c;不能做什么 摘要 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;已经成为许多领域的核心技术。然而&#xff0c;尽管它们展现出了惊人的能力&#xff0c;但也有明显的局限性…...

MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)

一、索引基础概念 1 索引是什么&#xff1f; 定义&#xff1a;索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;类似书籍的目录。核心作用&#xff1a;减少磁盘I/O次数&#xff0c;提升查询速度&#xff08;以空间换时间&#xff09;。 2 索引的优缺点 优点缺点加速…...

JS API

const变量优先 即对象、数组等引用类型数据可以用const声明 API作用和分类 DOM (ducument object model) 操作网页内容即HTML标签的 树状模型 HTML中标签 JS中对象 最大对象 document 其次大 html 以此类推 获取DOM对象 CSS 中 使用选择器 JS 中 选多个 时代的眼泪 修…...

hackmyvm-Principle

近况: 很难受、 也很累。 但是庆幸靶机很好 正值清明时节 清明时节雨纷纷 &#x1f327;️&#xff0c;路上行人欲断魂 &#x1f622;。 靶机地址 信息收集 主机发现 端口扫描 80端口仅仅是一个nginx 的欢迎界面而已 robots.txt的内容 hi.html的内容 hackme不存在 investigat…...

小刚说C语言刷题——第14讲 逻辑运算符

当我们需要将一个表达式取反&#xff0c;或者要判断两个表达式组成的大的表达式的结果时&#xff0c;要用到逻辑运算符。 1.逻辑运算符的分类 (1)逻辑非(!) &#xff01;a&#xff0c;当a为真时&#xff0c;&#xff01;a为假。当a为假时&#xff0c;&#xff01;a为真。 例…...

池化技术的深度解析与实践指南【大模型总结】

池化技术的深度解析与实践指南 池化技术作为计算机系统中的核心优化手段&#xff0c;通过资源复用和预分配机制显著提升系统性能。本文将从原理、实现到最佳实践&#xff0c;全方位剖析池化技术的核心要点&#xff0c;并结合实际案例说明其应用场景与调优策略。 一、池化技术的…...

基于Java的区域化智慧养老系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;区域化智慧养老系统当然不能排除在外。区域化智慧养老系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言、JSP技术以及…...

2025年3月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试

2025.03 Scratch图形化编程等级考试一级真题试卷 一、选择题 第 1 题 气球初始位置如下图所示&#xff0c;scratch运行下列程序&#xff0c;气球会朝哪个方向移动&#xff1f;&#xff08; &#xff09; A.水平向右 B.垂直向下 C.水平向左 D.垂直向上 答案&#xff1a…...

Docker 命令简写配置

alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 配置好后&#xff0c;需要输入&#xff1a; source ~/.bashrc 后生效...

linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux内核中&#xff0c;down, down_interruptible, down_killable, 和 up 是用于操作信号量&#xff08;semap hores&#xff09;的函数&#xff0c;它们用于进程同步和互斥。以下是对这些函数的简要说明。 1&#xff0c;down(&sem): 这个函数用于获取信号量。如果信号…...

【嵌入式-stm32电位器控制以及旋转编码器控制LED亮暗】

嵌入式-stm32电位器控制LED亮暗 任务1代码1Key.cKey.hTimer.cTimer.hPWM.cPWM.hmain.c 实验现象1任务2代码2Key.cKey.hmain.c 实验现象2问题与解决总结 源码框架取自江协科技&#xff0c;在此基础上做扩展开发。 任务1 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比…...

Mysql 中 ACID 背后的原理

在 MySQL 中&#xff0c;ACID 是事务处理的核心原则&#xff0c;用于保证数据库在执行事务时的可靠性、数据一致性和稳定性。ACID 是四个关键特性的首字母缩写&#xff0c;分别是&#xff1a;Atomicity&#xff08;原子性&#xff09;、Consistency&#xff08;一致性&#xff…...

【算法】简单数论

模运算 a m o d b a − ⌊ a / b ⌋ b a\ mod \ b a - \lfloor a / b \rfloor \times b a mod ba−⌊a/b⌋b n m o d p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关 模运算的性质&#xff1a; ( a b ) m o d m ( ( a m o d m ) ( b m o d m ) ) m o d m …...

mybatis慢sql无所遁形

痛点问题&#xff1a; 扫描项目的慢sql 并提出优化建议 开源项目地址&#xff1a;gitee&#xff1a;mybatis-sql-optimizer-spring-boot-starter: 这个starter可以帮助开发者在开发阶段发现SQL性能问题&#xff0c;并提供优化建议&#xff0c;从而提高应用程序的数据库访问效…...

MCP有哪些比较好的资源?

MCP&#xff08;Model Context Protocol&#xff09;是一种由Anthropic公司推出的开放协议&#xff0c;旨在为AI模型与开发环境之间提供统一的上下文交互接口。目前&#xff0c;围绕MCP协议的资源非常丰富&#xff0c;以下是一些比较好的MCP资源推荐&#xff1a; Smithery Smit…...

Nginx功能及应用全解:从负载均衡到反向代理的全面剖析

Nginx作为一款开源的高性能HTTP服务器和反向代理服务器&#xff0c;凭借其高效的资源利用率和灵活的配置方式&#xff0c;已成为互联网领域中最受欢迎的Web服务器之一。无论是作为HTTP服务器、负载均衡器&#xff0c;还是作为反向代理和缓存服务器&#xff0c;Nginx的多种功能广…...

FreeRTOS/任务创建和删除的API函数

任务的创建和删除本质就是调用FreeRTOS的API函数 API函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务vTaskDelete()删除任务 动态创建任务 任务的任务控制块以及任务的占空间所需的内存&#xff0c;均由FreeRTOS从FreeRTOS管理的堆中分配 静态创建…...

【jvm】GC评估指标

目录 1. 说明2. 吞吐量&#xff08;Throughput&#xff09;3. 暂停时间&#xff08;Pause Time&#xff09;4. 内存占用&#xff08;Footprint&#xff09;5. 频率&#xff08;Frequency&#xff09;6. 对象晋升率&#xff08;Promotion Rate&#xff09;7. 内存分配速率&#…...

数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3

pytorch网站学习 处理数据样本的代码往往会变得很乱、难以维护&#xff1b;理想情况下&#xff0c;我们希望把数据部分的代码和模型训练部分分开写&#xff0c;这样更容易阅读、也更好维护。 简单说&#xff1a;数据和模型最好“分工明确”&#xff0c;不要写在一起。 PyTor…...

影响RTOS实时性的因素有哪些?

目录 1、任务调度延迟 2、中断处理延迟 3、系统负载 4、任务优先级反转 5、时钟精度 6、内存管理 影响RTOS实时性的因素主要包括任务调度延迟、中断处理延迟、系统负载、任务优先级反转、时钟精度、内存管理等。 1、任务调度延迟 任务调度器是RTOS的核心&#xff0c;当…...

二叉树 递归

本篇基于b站灵茶山艾府的课上例题与课后作业。 104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&…...

ZLMediaKit 源码分析——[5] ZLToolKit 中EventPoller之延时任务处理

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一&#xff1a;获取音频和视频设备 第五篇 WebRTC学习二&#xff1a;WebRTC音视频数据采集 第六篇 WebRTC学习三…...

【51单片机】2-6【I/O口】电动车简易防盗报警器实现

1.硬件 51最小系统继电器模块震动传感器模块433M无线收发模块 2.软件 #include "reg52.h" #include<intrins.h> #define J_ON 1 #define J_OFF 0sbit switcher P1^0;//继电器 sbit D0_ON P1^1;//433M无线收发模块 sbit D1_OFF P1^2; sbit vibrate …...

windows下载安装远程桌面工具RealVNC-Server教程(RealVNC_E4_6_1版带注册码)

文章目录 前言一、下载安装包二、安装步骤三、使用VNC-Viewer客户端远程连接&#xff0c;输入ip地址&#xff0c;密码完成连接 前言 在现代工作和生活中&#xff0c;远程控制软件为我们带来了极大的便利。RealVNC - Server 是一款功能强大的远程控制服务器软件&#xff0c;通过…...

C语言的操作系统

C语言的操作系统 引言 操作系统是一种系统软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;并为计算机程序提供公共服务。在现代计算机科学中&#xff0c;操作系统是不可或缺的组成部分&#xff0c;而C语言则是实现高效操作系统的主要编程语言之一。本文将探讨C语言在…...

selectdb修改表副本

如果想修改doris&#xff08;也就是selectdb数据库&#xff09;表的副本数需要首先确定是否分区表&#xff0c;当前没有数据字典得知哪个表是分区的&#xff0c;只能先show partitions看结果 首先&#xff0c;副本数不应该大于be节点数 其次&#xff0c;修改期间最好不要跑业务…...

leetcode数组-有序数组的平方

题目 题目链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/ 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff…...

【python中级】关于Cython 的源代码pyx的说明

【python中级】关于Cython 的源代码pyx的说明 1.背景2.编译3.语法1.背景 Cython 是一个编程语言和工具链,用于将 Python 代码(或类 Python 的代码)编译成 C 语言,再进一步生成高性能的 Python 扩展模块(.so 或 .pyd 文件)。 在 Python 中,.pyx 文件是 Cython 的源代码文…...

开放最短路径优先 - OSPF【LSA详细】

目录 LSA的头部结构 LSA类型 LSA数据包 LSA的主要作用是传递路由信息。 LSA的头部结构 共占20个字节&#xff0c;不同类型的LSA头部字段部分都是相同的。 链路状态老化时间(Link-State Age) 2个字节。指示该条LSA的老化时间&#xff0c;即它存在了多长时间&#xff0c;单位…...

PyTorch:解锁AI新时代的钥匙

揭开PyTorch面纱 对于许多刚开始接触人工智能领域的朋友来说&#xff0c;PyTorch这个名字或许既熟悉又陌生。熟悉在于它频繁出现在各类技术论坛和新闻报道中&#xff1b;而陌生则源于对这样一个强大工具背后运作机制的好奇。简单来说&#xff0c;PyTorch是一个开源库&#xff…...

欧几里得算法求最大公约数、最小公倍数

这段代码就是不断用较小数和余数来更新 a 和 b&#xff0c;直到余数变为 0&#xff0c;最后返回的 a 就是最大公约数。 #include <iostream> using namespace std;//最大公约数 int gcd(int a, int b){//这个循环表示只要 b 不是 0&#xff0c;就继续进行。//因为当 b …...

QEMU源码全解析 —— 块设备虚拟化(14)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(13) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析VirtioDeviceClass的realize函数virtio_blk_device_realize(),再来回…...

深入理解AOP:面向切面编程的核心概念与实战应用

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

3500 阶乘求和

3500 阶乘求和 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;2023、思维、省赛 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {long sum 0;for(int i1;i<50;i) { // 之后取模都相等su…...

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …...

Mysql 行级锁在什么样的情况下会升级为表级锁?

在 MySQL 中&#xff0c;行级锁通常由 InnoDB 存储引擎使用&#xff0c;因为它支持高并发和细粒度的锁定。通常情况下&#xff0c;InnoDB 在执行诸如 UPDATE、DELETE 或 SELECT FOR UPDATE 等操作时&#xff0c;会为被修改的数据行加锁&#xff08;行级锁&#xff09;。但是&am…...

docker部署kkfileview

拉取 KKFileView 镜像 docker pull keking/kkfileview或指定版本 docker pull keking/kkfileview:4.1.0运行 KKFileView 容器 docker run -d \--name kkfileview \-p 8012:8012 \--restart always \keking/kkfileview-d&#xff1a;后台运行 -p 8012:8012&#xff1a;将容器…...