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

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。

目录

一、什么是平滑处理

1、平滑的目的是什么? 

2、常见的图像噪声 

(1)椒盐噪声

​编辑(2) 高斯噪声

(3) 泊松噪声

(4) 斑点噪声

 二、图像平滑处理的方法

1、均值滤波

 2、高斯滤波

(1)高斯函数 

(2)高斯滤波的卷积核 

(3)高斯滤波的操作过程

 3、中值滤波

(1)中值滤波的原理 

(2)中值滤波的步骤

​编辑(3)中值滤波的优缺点 

 4、双边滤波

(1)双边滤波的原理 

(2)双边滤波的数学公式 

 (3)双边滤波的步骤

(4)双边滤波的优缺点 


一、什么是平滑处理

在图像处理中,"平滑"是指减少图像中噪声或细节的过程,目的是让图像看起来更加平滑、柔和,或是突出主要特征,同时抑制不必要的细节。平滑操作常常用于噪声去除、边缘检测之前的预处理等任务。

因此,你只需明白图像处理中“平滑”操作就是一种“预处理”的手段,目的是为后续的处理工作做铺垫。 

1、平滑的目的是什么? 

  • 噪声去除图像在采集过程中可能会受到各种噪声的影响,平滑操作能够有效减小噪声对图像质量的影响。
  • 特征提取通过平滑去除细节,有助于在后续处理(如边缘检测、形态学处理等)中更好地提取关键特征。
  • 图像压缩某些压缩算法依赖于图像的平滑化,以降低数据冗余。

2、常见的图像噪声 

在介绍平滑处理的方法时,我想想介绍一下常见的图像噪声。

图像噪声是指在图像中出现的无意义的、随机的像素值,通常由传感器、信号处理或环境干扰等因素引起。这些噪声会破坏图像的质量,使得图像显得模糊、杂乱、失真。

(1)椒盐噪声

这种噪声在图像中表现为一些亮白色或黑色的随机小点,通常是由数据传输错误或压缩过程中的问题引起的。

椒盐噪声(Salt-and-pepperNoise)也称为脉冲噪声,是一种随机出现的白点或黑点,具体表现为亮的区域有黑色像素,或是暗的区域有白色像素,又或是两者皆有。

(2) 高斯噪声

是一种呈现正态分布的噪声,通常表现为图像中的像素值出现细微的随机波动。高斯噪声在许多实际场景中都很常见,尤其是在低光照条件下。

高斯噪声(GaussNoise)是指概率密度函数服从高斯分布(正态分布)的一类噪声。除了常用抑制噪声的方法外,常采用数理统计方法对高斯噪声进行抑制

(3) 泊松噪声

在低光照条件下,图像的噪声可能呈现泊松分布,这种噪声通常表现为图像中某些区域的像素值有较大的波动。

(4) 斑点噪声

常见于雷达成像或医学成像中,它的特点是图像局部区域的像素值变化比较剧烈,通常是由成像设备的工作原理或测量误差引起的。

 二、图像平滑处理的方法

1、均值滤波

  • 原理:将每个像素值替换为其邻域内像素的平均值。
  • 效果:均值滤波能够有效去除噪声,但会导致图像模糊,特别是当噪声较多时。
  • 实现:使用一个固定大小的卷积核(如 3x3、5x5)对图像进行卷积操作。

均值滤波(MeanFiltering)就是对图像的所有像素点进行取均值,即以一个方形区域为单位,将该区域的中心像素点赋值为区域内所有像素点的平均值。

​​​​​​​

 数学表达式:

设图像为二维矩阵,图像的像素值表示为I(x,y),其中xy是图像的横纵坐标。

  • 均值滤波器通常采用一个大小为k*k的卷积核,表示为 K
  • 假设滤波后的像素值\dot{I}(x,y) 是当前像素周围k*k区域的平均值,可以通过卷积操作来实现:

其中(x,y)是当前像素点的位置,k*k是滤波器的尺寸。

  • 在这个过程中,卷积核的每个元素都等于\frac{1}{k^{2}},即均值滤波器是一个均匀的滤波器。

均值滤波的步骤: 

  1. 选择滤波器大小:选择一个 k*k的滤波器大小(通常为奇数,例如 3×33×3, 5×55×5, 7×77×7 等),这个大小决定了每个像素周围的邻域范围。
  2. 遍历图像:遍历图像中的每一个像素点,对于每个像素点,计算其周围邻域内像素的均值。
  3. 更新像素值:将该邻域的均值赋给当前像素点,完成平滑处理。

在Python中,可以通过使用OpenCV库来实现均值滤波。 

import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg')# 使用3x3的均值滤波器
result = cv2.blur(image, (3, 3))# 显示原图和处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Image', result)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

此代码利用OpenCV中的cv2.blur()函数应用3x3大小的均值滤波器对图像进行平滑处理。 

均值滤波是一种简单而有效的图像去噪方法,适用于去除随机噪声。然而,由于它会模糊图像细节,尤其是边缘,因此在需要保留细节的场景下,可能需要使用更复杂的滤波算法(如高斯滤波或中值滤波)。 

 2、高斯滤波

  • 原理:利用高斯分布对图像进行加权平均处理,权重较高的像素对结果的贡献较大,权重较低的像素对结果的影响较小。
  • 效果:高斯滤波比均值滤波保留更多的图像结构,减少了噪声的同时,边缘损失较少,平滑效果较为自然。
  • 实现:使用高斯函数生成卷积核,然后用该卷积核对图像进行卷积操作。

高斯滤波(Gaussian Filtering)是一种常见的图像处理方法,主要用于去除图像中的噪声或平滑图像。它通过卷积运算与高斯函数(正态分布函数)相结合,对图像进行模糊处理。高斯滤波的核心思想是:使用一个高斯核(即一个矩阵)与图像进行卷积,从而在图像上应用模糊效果,减弱细节并减少噪声。

(1)高斯函数 

高斯滤波的基础是高斯函数,它的公式如下:

  • G(x,y)是高斯分布的值,表示在点(x,y)处的权重。
  • \sigma是高斯函数的标准差,控制高斯分布的宽度。标准差越大,平滑效果越强;标准差越小,平滑效果越弱。
  • (x,y)是相对于高斯滤波器中心点的坐标。

这个高斯函数呈现钟形曲线,值在中心最大,随着远离中心的距离增大,值逐渐减小。因此,高斯滤波会根据距离中心的远近对周围像素赋予不同的权重,离中心越远的像素权重越小。

(2)高斯滤波的卷积核 

高斯滤波通常通过一个卷积核(或称为滤波器)来实现,该核是基于二维高斯函数构造的。卷积核的大小决定了滤波的效果,通常为奇数尺寸(如3×3、5×5、7×7等)

 例如,一个简单的3×3高斯核可能如下所示(假设\sigma =1):

这个矩阵表示了高斯滤波器的权重。每个像素的值都被乘以相应的位置权重,然后加总,得到新的像素值。高斯滤波器对图像进行卷积时,权重较大的像素会对中心像素的影响更大,而权重较小的像素则对其影响较小。

(3)高斯滤波的操作过程

高斯滤波的基本操作过程可以分为以下几步:

  1. 选择卷积核大小和标准差 \sigma:选择一个适合的高斯核,并确定标准差\sigma来控制平滑程度。

  2. 对每个像素进行卷积操作:对图像中的每个像素位置,使用高斯核与其周围的像素进行卷积运算。卷积的计算方式是:将高斯核与图像像素值逐点相乘,得到加权和。

  3. 更新像素值:将卷积运算得到的加权和作为该像素的新值。

  4. 处理边界问题:在边缘或角落处,由于周围像素不足以填满整个卷积核,可以采用零填充、镜像填充等方法来处理。

 在Python中,可以通过使用OpenCV库来实现高斯滤波。

import cv2# 读取图像
image = cv2.imread('image.jpg')# 使用高斯滤波进行图像平滑,(5, 5)为核大小,0为自动计算标准差
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 显示原图与处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Blurred Image', blurred_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

 3、中值滤波

  • 原理:将每个像素值替换为其邻域内所有像素值的中位数。
  • 效果:中值滤波对于去除椒盐噪声(即黑白像素的随机分布)非常有效,比均值滤波更能保留边缘信息。
  • 实现:遍历图像,每次将一个窗口内的像素值排序,取其中间的值作为当前像素的值。

中值滤波(Median Filtering)是一种常用的图像平滑和去噪方法,尤其在处理椒盐噪声时表现优异。它的基本思想是:对于图像中的每个像素,将该像素的邻域内像素值按大小排序,然后用排序后的中位数值替代当前像素的值。中值滤波不仅能有效去除噪声,还能较好地保留图像的边缘特征。

(1)中值滤波的原理 

与均值滤波不同,中值滤波并不是取邻域像素的平均值,而是选择邻域内像素值的中位数。中位数是指一组数据按大小排序后,位于中间位置的值。对于一个大小为k*k的邻域窗口,将该邻域的像素值排序,并取中间的值作为当前像素的新值。

例如,对于一个 3×3 的邻域窗口:

[ 7, 2, 3 ]
[ 5, 8, 1 ]
[ 4, 9, 6 ]

排序后的像素值为:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

中位数是排序后的中间值,位置为第五个元素,即 5。因此,这个窗口中心的像素值将被替换为 5

(2)中值滤波的步骤

  1. 选择窗口大小:通常选择一个k*k的邻域窗口(例如 3×3, 5×5 等)。窗口大小为奇数,确保有一个明确的中心点。
  2. 遍历图像:对图像中的每个像素点进行操作,取该像素及其邻域的像素值。
  3. 排序并替换:将邻域内的像素值排序,取排序后的中位数,并用该中位数值替代当前像素的值。
  4. 处理边界:对于图像的边缘像素,邻域可能会超出图像范围,通常可以采取填充边界或镜像填充等方法处理。

(3)中值滤波的优缺点 

优点:

  • 去噪效果好:中值滤波能够有效去除椒盐噪声,因为椒盐噪声通常是极端的亮点或暗点,而中值滤波能够将这些极端值替换为邻域的中位数。
  • 保边缘能力强:相比均值滤波,中值滤波对图像的边缘信息影响较小,因为它不会对像素值进行平均化,而是通过排序选择合适的中位数来替换。
  • 无需假设噪声分布:与高斯滤波等方法不同,中值滤波不依赖于噪声的统计特性,因此对不同类型的噪声具有较好的鲁棒性。

缺点:

  • 计算复杂度较高:对于每个像素,需对邻域像素进行排序,时间复杂度为O(k^{2}\log (k^{2})),尤其是当图像较大时,计算量较大。
  • 对细节有一定影响:尽管中值滤波能有效去除噪声,但在处理较复杂的图像时,过度滤波可能会导致图像细节的损失。

在OpenCV中,可以使用cv2.medianBlur()函数实现中值滤波。 

import cv2# 读取图像
image = cv2.imread('image.jpg')# 使用3x3的中值滤波
median_blurred_image = cv2.medianBlur(image, 3)# 显示原图与处理中值滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Median Filtered Image', median_blurred_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.medianBlur(image, ksize):这个函数接受两个参数,image 是输入图像,ksize 是滤波器的大小,通常为奇数(例如 3、5、7 等)。它会使用一个 k×k 的邻域进行中值滤波。

中值滤波是一种有效的图像去噪方法,尤其适用于去除椒盐噪声。它的主要优点是能够在去噪的同时保留边缘和细节信息,因此在许多图像处理和计算机视觉任务中得到了广泛应用。尽管它的计算复杂度相对较高,但它对于处理噪声的鲁棒性和效果常常使其成为首选方法之一。

 4、双边滤波

  • 原理:双边滤波不仅考虑像素空间中的邻近关系,还考虑像素值的相似性,能够在平滑图像的同时保留边缘。
  • 效果:在去噪的同时能较好地保留图像的边缘信息,适用于去除细微噪声且保持图像细节的场景。
  • 实现:双边滤波结合了空间距离和像素值差异进行加权处理,相较于其他滤波器,计算复杂度较高。

双边滤波(Bilateral Filtering)是一种在图像处理中常用的非线性滤波方法,能够在平滑图像的同时保留图像的边缘信息。与传统的线性滤波方法(如均值滤波、高斯滤波)不同,双边滤波不仅考虑像素的空间邻近性,还考虑像素值的相似性,这使得它在处理图像细节和边缘时表现出色。 

(1)双边滤波的原理 

双边滤波的核心思想是在每个像素的邻域内进行加权平均,但权重不仅依赖于空间距离,还依赖于像素值的相似度。这种加权方式使得在平滑区域(没有边缘的地方)能够有效地进行平滑,而在边缘附近则能够保留边缘信息。

对于图像中的每个像素点 p,双边滤波通过以下步骤进行:

  1. 空间权重:基于像素之间的空间距离d(p,q),越靠近的像素,其权重越大。
  2. 像素值权重:基于像素值之间的相似度\left | \left | I(p)-I(q) \right | \right |,像素值相似的点给予更高的权重。
  3. 加权平均:最终通过计算空间和像素值的加权平均来得到新的像素值。

(2)双边滤波的数学公式 

对于图像中一个像素I(p),其经过双边滤波后的值{I}'(p)是通过加权平均其邻域内像素值得到的,公式如下:

 (3)双边滤波的步骤

  1. 计算邻域内像素的空间权重:使用高斯函数计算像素之间的空间距离d(p,q)权重。
  2. 计算像素值的相似性权重:使用高斯函数计算像素值之间的差异\left | I(p)-I(q) \right |权重。
  3. 计算加权平均:对每个像素,考虑空间权重和像素值权重的加权平均,得到新的像素值。
  4. 归一化处理:为了使得加权平均的结果合理,需要对加权和进行归一化,通常会通过计算一个归一化因子W_{p}来完成。

(4)双边滤波的优缺点 

优点:

  • 边缘保留:双边滤波能够在去噪的同时保持图像的边缘信息,因此特别适合去除噪声同时保持细节的任务。
  • 非线性:由于双边滤波是基于像素值的相似度加权的,因此它是非线性的,可以很好地处理图像中的各种噪声。
  • 适用性广泛:双边滤波不仅可以用于图像去噪,还可以用于图像平滑、纹理去除等多种应用。

缺点:

  • 计算量大:由于双边滤波需要计算每个像素与其邻域内其他像素的空间距离和像素值差异,因此其计算量较大,尤其是在高分辨率图像上,效率较低。
  • 参数调节困难:双边滤波有两个重要的参数:空间权重的标准差\sigma _{d}和像素值权重的标准差\sigma _{r}​,需要根据图像的不同特性进行调节,调节不当可能会导致过度平滑或保留过多噪声。

在OpenCV中,可以使用cv2.bilateralFilter()函数实现双边滤波。 

import cv2# 读取图像
image = cv2.imread('image.jpg')# 使用直径为15,标准差为75的双边滤波
bilateral_filtered_image = cv2.bilateralFilter(image, d=15, sigmaColor=75, sigmaSpace=75)# 显示原图与双边滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 ​编辑(2) 高斯噪声 &a…...

【java面向对象编程】第七弹----Object类、类变量与类方法

笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:javase 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、Object类 1.1equa…...

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示(Prompt)来引导模型生…...

Connecting to Oracle 11g Database in Python

# encoding: utf-8 # 版权所有 2024 涂聚文有限公司 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:python -m pip install oracledb # python -m pip install cx_Oracle --upgrade # pip install cx_Oracle # Autho…...

16.2、网络安全风险评估技术与攻击

目录 网络安全风险评估技术方法与工具 网络安全风险评估技术方法与工具 资产信息收集,可以通过调查表的形式把我们各类的资产信息进行一个统计和收集,掌握被评估对象的重要资产分布,进而分析这些资产关联的业务面临的安全威胁以及存在的安全…...

Windows脚本清理C盘缓存

方法一:使用power文件.ps1的文件 脚本功能 清理临时文件夹: 当前用户的临时文件夹(%Temp%)。系统临时文件夹(C:\Windows\Temp)。 清理 Windows 更新缓存: 删除 Windows 更新下载缓存&#xff0…...

ChromeOS 131 版本更新

ChromeOS 131 版本更新 1. ChromeOS Flex 自动注册 在 ChromeOS 131 中,ChromeOS Flex 的自动注册功能现已允许大规模部署 ChromeOS Flex 设备。与 ChromeOS 零接触注册类似,自动注册将通过组织管理员创建的注册令牌嵌入到 ChromeOS Flex 镜像中。这将…...

PDF24 Creator免费版

PDF点击上方"蓝字"关注我们 01、前言 >>> 官网:https://tools.pdf24.org/zh/creator PDF24 Creator完全免费,没有任何限制。企业也能免费用。 不可以,PDF24 Creator只能装在Windows系统上。目前不支持Linux和Mac。 PDF24…...

网络安全之访问控制

简介 同一分布式环境下,同一用户可能具有多个应用服务器的访问授权,同一应用服务器也有多个授权访问的用户,同一用户在一次事务中可能需要访问多个授权访问的应用服务器,应用服务器可能还需要对访问用户进行身份鉴别。为了实现这…...

vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)

在不依赖 Vite 或其他构建工具的情况下,使用 TailwindCSS CLI 快速生成独立的 CSS 文件是一种简单高效的方法,适合需要纯样式文件的场景。 这个项目中,使用到了tailwindCss, 需要把里面的样式打包出来,给其他项目用。 使用命令生…...

前端登录注册页面springboot+vue2全开发!

需求目标: 有“登录界面”和“注册界面”以及“功能操作界面”: 我们打开程序会自动进入“登录界面”,如果密码输入正确则直接进入“功能操作界面”,在“登录界面”我们可以点击注册进入“注册页面”,注册好了可以再跳…...

批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等

文章目录 提取zotero的PDF上传到AI平台保留文件名代码分成20个PDF视频讲解 提取zotero的PDF 右键查看目录 发现目录为 C:\Users\89735\Zotero\storage 写代码: 扫描路径‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部复制一份汇总到"C:\Users\89735\Downl…...

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包 java.lang:系统基础类 java.io:文件操作相关类,比如文件操作 java.nio:为了完善io包中的功能,提高io性能而写的一个新包 java.net:网络相关的包 java.util:java辅助类,特别是集合类 java.sql:数据库操作类 IO流 按照流的流向分…...

解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题

配置一下apache里面的配置文件:httpd.conf 和 httpd.vhosts.conf httpd.conf httpd-vhosts.conf 重启服务 展示: 浏览器中中文乱码问题:...

带有 Elasticsearch 和 Langchain 的 Agentic RAG

作者:来自 Elastic Han Xiang Choong 讨论并实现 Elastic RAG 的代理流程,其中 LLM 选择调用 Elastic KB。 更多阅读:Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索。 简介 代理是将 LLM 应用于实际用例的…...

【数据结构与算法】深度优先搜索:树与图的路径探寻之道

一、引言 在计算机科学领域,树与图的路径搜索是一个基础且重要的问题,而深度优先搜索算法(Depth First Search,简称 DFS)则是解决此类问题的经典算法之一。深度优先搜索算法通过从起始节点开始,沿着一条路径…...

vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)

效果图: 图一:选中操作 图二:上下左右拖拽操作 本案例在echarts​​​​​​​示例机场航班甘特图的基础上修改​​​​​​​ 封装ganttEcharts组件,测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测​​​​…...

【EXCEL 逻辑函数】AND、OR、XOR、NOT、IF、IFS、IFERROR、IFNA、SWITCH

目录 AND:当所有条件都为真时返回 TRUE,否则返回 FALSE OR:当任一条件为真时返回 TRUE,否则返回 FALSE XOR:当奇数个条件为真时返回 TRUE,否则返回 FALSE NOT :反转逻辑值 IF:根…...

单片机长耗时前后台任务优化

代码: void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…...

java引入jedis并且关于开放redis端口问题

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1. 引入jedis ​编辑 2. 关于java客户端开放redis端口问题 3. 连接redis服务器 redis服务器在官网公开了使用的协议: resp…...

测试电脑是否真实多核CPU

测试电脑是否真实多核CPU 在CPU的描述上现在多数看到的是多核心/多内核,看上去就像是多CPU的样子。但核心是有分真实核心和虚拟核心。如果是真实的多核心,多线程是能够并行。如果不是多核心,多线程就只能够并发。 这里就直接采用多线程的应用…...

Ubuntu 安装实时内核指南

在运行需要高精度和低延迟响应的机器人驱动程序时,安装一个具备实时内核(Real-Time Kernel)的 Ubuntu 系统是至关重要的。若缺乏实时系统的支持,高频率的控制指令可能会导致机器人运动轨迹不流畅,甚至产生抖动现象。以…...

LeetCode:1387. 将整数按权重排序(记忆化搜索 Java)

目录 1387. 将整数按权重排序 题目描述: 实现代码与解析: 记忆化搜索 原理思路: 1387. 将整数按权重排序 题目描述: 我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数: 如果 x 是偶数&#xff…...

某音最新滑块3.5.68(Web/App皆可支持)

某音滑块核心是 captchaBody 参数 难度较大 h5_sdk_version - 代表验证码的版本 如何代表通过验证了呢? 1.web端 fp参数 - verify_m4zafhzb_yARRD6RZ_YwNj_4gjp_AdsL_yxw0thiqv0ub 2.移动端 did参数 - 1997744780462444 当该接口返回如下数据即通过验证码 该设…...

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用(muxers)和解复用(demuxers)容器格式FLVScript Tag Data结构(脚本类型、帧类型)Audio Tag Data结构(音频Tag)V…...

观察者模式(sigslot in C++)

大家,我是东风,今天抽点时间整理一下我很久前关注的一个不错的库,可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计,sigslot 官网: http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…...

git企业开发的相关理论(二)

目录 git企业开发的相关理论(一) 八.修改文件 九.版本回退 十.撤销修改 情况一(还没有add) 情况二(add后还没有commit) 情况三(commit后还没有push) 十一.删除本地仓库中的文件 方法一 方法二 十二.理解分支 1.常见的分支工作流程 2.合并冲…...

力扣-图论-70【算法学习day.70】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

jmeter中的prev对象

在jmeter中通过beanshell、JSR223的各种处理器编写脚本时,都会看到页面上有这样的说明 这些ctx、vars、props、OUT、sampler、prev等等都是可以直接在脚本中使用的对象,由jmeter抛出 今天主要讲一下prev的使用 SampleResult prev jmctx.getPreviousRe…...

机器学习中的密度聚类算法:深入解析与应用

在机器学习的广阔领域中,聚类算法作为一种无监督学习方法,扮演着至关重要的角色。其中,密度聚类算法以其独特的优势,在数据挖掘、图像分割、市场细分等多个领域得到了广泛应用。 一、密度聚类算法的基本原理 密度聚类算法是一种…...

简单分析一下 a,b,c=a+1,a+1,b+1 执行原理

在 Go 语言中,赋值表达式 a, b, c x, y, z 是同时进行的,但是其计算顺序是从左到右依次进行的。即在 a, b, c 被赋值之前,先计算 x, y, z 的值,并依次将它们赋值给 a, b, c。 例如:a, b, c a1, a1, b1,其…...

2025年前端面试热门题目——HTML|CSS|Javascript|TS知识

以下是对这些 HTML 面试问题的详细解答&#xff1a; 1. HTML 的 src 和 href 属性有什么区别? src (Source) 属性&#xff1a; 用于嵌入资源&#xff0c;例如图像、脚本或 iframe。加载资源时&#xff0c;当前页面的加载会暂停&#xff0c;直到资源加载完成。常用于 <img&g…...

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展&#xff0c;4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性&#xff0c;为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…...

【102. 二叉树的层序遍历 中等】

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例…...

文件包含tomato靶机通关

靶机地址&#xff1a;192.168.152.152 注&#xff1a;靶机打开后在 kali 中扫描一下就能得到 打开网站 第一步信息收集 将网址放到 dirb 中扫描一下 得到了三个目录 我们挨个访问一下 第一个是主目录 第二个是主页面 第三个报错 第二步 我们在主目录页面继续访问 我们进行…...

oracle dblink 的创建及使用

Oracle Database Link&#xff08;DB Link&#xff09;是Oracle提供的一种功能&#xff0c;允许你在一个数据库中直接访问另一个远程或本地数据库的对象&#xff08;如表、视图、序列等&#xff09;。DB Link的设置简化了跨数据库操作&#xff0c;使得数据的集成和同步变得更加…...

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…...

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

一、温度传感器模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2&#xff0c;所有拓展模块均可直接安装在 Lora 终端上使用&#xff1b; 图1 拓展接口 温度传感器模块电路原理图如下所示&#xff1a; 图2 …...

Zookeeper 底层原理解析

一、引言 在分布式系统的浩瀚星空中&#xff0c;Zookeeper 宛如一颗最为闪耀的导航星&#xff0c;为众多分布式应用指引方向、保驾护航。无论是大名鼎鼎的 Hadoop、HBase&#xff0c;还是其他各类复杂的分布式架构&#xff0c;Zookeeper 都扮演着不可或缺的关键角色。它如同一…...

面试题整理9----谈谈对k8s的理解1

谈谈对k8s的理解 1. Kubernetes 概念 1.1 Kubernetes是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的…...

PromptGIP:Unifying lmage Processing as Visual Prompting Question Answering

“Unifying Image Processing as Visual Prompting Question Answering” 文章提出了一种名为 PromptGIP 的通用模型&#xff0c;将图像处理任务统一为视觉提示问答范式&#xff0c;在多个图像处理任务上展现出良好性能&#xff0c;为通用图像处理提供了新的思路和方法。 confe…...

chart文件结构

在 Helm 中&#xff0c;Chart 是一个用于定义、安装和升级 Kubernetes 应用程序的包。Chart 文件结构遵循一定的目录和文件组织方式&#xff0c;以下是典型的 Helm Chart 文件结构&#xff1a; 1. Chart 文件结构示例 mychart/ ├── Chart.yaml # 描述 Chart 的基…...

SQL优化

SQL优化 插入数据 insert优化 批量插入 insert into tb_test 2values(1, Tom), (2, Cat), (3, jerry); 手动提交事务 start transaction; insert into test1 values(4, Tom), (5, Cat), (6, jerry); insert into test1 values(7, Tom), (8, Cat), (9, jerry); insert int…...

输出1-100之间的随机数,控制输出格式,每行10个(注释有详解)

C 随机数生成与格式化输出 在编程中&#xff0c;随机数的生成是一个常见的需求&#xff0c;尤其是在游戏开发、模拟实验和数据分析等领域。本文将通过一个简单的 C 程序来演示如何生成随机数并进行格式化输出。我们将逐步解析代码&#xff0c;并讨论其工作原理及应用场景。 代…...

【数字化】华为数字化转型架构蓝图-2

目录 1、客户联结的架构思路 1.1 ROADS体验设计 1.2 具体应用场景 1.3 统一的数据底座 1.4 案例与成效 2、一线作战平台的架构思路 2.1 核心要素 2.2 关键功能 2.3 实施路径 2.4 案例与成效 3、能力数字化的架构思路 3.1 能力数字化的核心目标 3.2 能力数字化的实…...

MyBatis是什么?为什么有全自动ORM框架还是MyBatis比较受欢迎?

MyBatis是什么&#xff1f; MyBatis是一个半自动的ORM持久层框架&#xff0c;内部封装了JDBC&#xff0c;mybatis是通过XML或注解的方式将需要执行的statement配置&#xff0c;支持定制化sql&#xff0c;存储过程以及高级映射。 解释 所谓的半自动ORM意思就是将JDBC的工作交…...

基础元器件的学习

1、二极管 1.1二极管的符号 ZD是稳压二极管 VD、V、D是普通二极管的符号。 1.2二极管的反向恢复时间 首先交流电为上正下负&#xff0c;然后下正上负。当二极管接到反向电压&#xff0c;二极管存在寄生电容&#xff0c;电压不能立刻突变&#xff0c;当输入频率变高时&#…...

GTID下复制问题和解决

环境介绍 数据库1主2从&#xff0c;mysql版本是v5.19 表结构 一、主库新增记录&#xff0c;从库提示主键冲突 模拟故障 1&#xff0c; master上关闭 sql_log_bin,删除id 103 后打开 2&#xff0c; 确认此时从库有id103,主库没有 3&#xff0c; master insert id103 主从异常…...

Linux 下的 GPT 和 MBR 分区表详解

文章目录 Linux 下的 GPT 和 MBR 分区表详解一、分区表的作用二、MBR&#xff08;Master Boot Record&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 三、GPT&#xff08;GUID Partition Table&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 四…...

mysql的事务控制和数据库的备份和恢复

事务控制语句 行锁和死锁 行锁 两个客户端同时对同一索引行进行操作 客户端1正常运行 客户端2想修改&#xff0c;被锁行 除非将事务提交才能继续运行 死锁 客户端1删除第5行 客户端2设置第1行为排他锁 客户端1删除行1被锁 客户端2更新行5被锁 如何避免死锁 mysql的备份和还…...