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

10篇--图像噪点消除

概念

何为噪点?

噪点:指图像收到的一些干扰因素,通常是由图像采集设备、传输信道等因素造成的,表现为图像中随机的亮度,也可以理解为有那么一些点的像素值与周围的像素值格格不入。

常见的噪声类型

  • 高斯噪声:一种分布符合正态分布的噪声,会使图像变得模糊或有噪点。
  • 椒盐噪声:一些黑白色的像素值分布在原图像中

左侧为高斯噪声                    上面为原图                        右侧为椒盐噪声

如何消除噪点

滤波器

使用滤波器,其主要功能是去除信号中的噪声或干扰,从而提高信号的信噪比。根据同频率区域中噪声信号和真实信号所在频率段的不同,将噪音所在的频率段进行屏蔽或改变其幅值。

下面我们来了解一下滤波器是如何工作的

滤波器:也可以叫做卷积核,与自适应二值化中的核一样,本身是一个小的区域,有着特定的核值,并且工作原理也是在原图上进行滑动并计算中心像素点的像素值。

  • 滤波器可分为线性滤波和非线性滤波
  • 线性滤波对邻域中的像素进行线性运算,如在核的范围内进行加权求和。
    • 常见的线性滤波器有均值滤波方框滤波高斯滤波等。
  • 非线性滤波则是利用原始图像与模板之间的一种逻辑关系得到结果。
    • 常见的非线性滤波器有中值滤波器双边滤波器等。

滤波与模糊在图像处理上有一定的联系与区别:

  • 它们都属于卷积,不同滤波方法之间只是卷积核不同(对线性滤波而言
  • 低通滤波器是模糊,高通滤波器是锐化
    • 低通滤波器就是允许低频信号通过,在图像中边缘和噪点都相当于高频部分,所以低通滤波器用于去除噪点、平滑和模糊图像。
    • 高通滤波器则反之,用来增强图像边缘,进行锐化处理。

注意:椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白点;高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。

上面介绍了5种常见的滤波方式,现在我们来学习一下

线性滤波(模糊)方式

1. 均值滤波

均值滤波是一种最简单的滤波处理,它取的是卷积核区域内元素的均值,如3×3的卷积核:

 比如有一张4*4的图片,现在使用一个3*3的卷积核进行均值滤波时,其过程如下所示:

对于边界的像素点,则会进行边界填充,以确保卷积核的中心能够对准边界的像素点进行滤波操作。默认使用BORDER_REFLECT_101的方式进行填充。

通过卷积核在原图上从左上角滑动计算到右下角,从而得到新的4*4的图像的像素值。

卷积核的中心点(3*3的中间像素点)会依次滑过1,2,3......,并计算出对应值

cv2.blur()函数

功能:用于对图像进行均值滤波(也称为平滑或模糊处理)的函数。均值滤波是一种简单的图像平滑技术,它通过替换图像中每个像素的值为其邻域像素值的平均值来减少图像噪声和细节。

参数:

  • src: 输入图像,即你想要进行模糊处理的源图像。
  • ksize: 核大小,用于指定均值滤波器的尺寸。它是一个元组 (width, height),表示滤波器在水平和垂直方向上的大小。通常,width 和 height 应该是奇数,以确保滤波器有一个中心像素。
  • dst: 输出图像,这是一个可选参数。
  • anchor: 锚点,这是一个可选参数,表示滤波器在源图像中应用的起始位置。默认值是 (-1, -1),这意味着锚点位于滤波器的中心。在大多数情况下,你不需要改变这个参数。
  • borderType: 边界类型,这是一个可选参数,用于指定边界像素的外推方法。当滤波器应用到图像边缘时,需要一些额外的像素来计算边界像素的邻域平均值。OpenCV 提供了多种边界类型,如 cv2.BORDER_DEFAULT(默认)、cv2.BORDER_CONSTANT(用常数填充)、cv2.BORDER_REFLECT(反射边界)等。在大多数情况下,默认边界类型就足够了。

 2. 方框滤波

方框滤波跟均值滤波很像,如3×3的滤波核如下:

比如有一张4*4的图片,现在使用一个3*3的卷积核进行均值滤波时,其过程如下所示:

对于边界的像素点,默认使用BORDER_REFLECT_101的方式进行填充。

其滤波的过程与均值滤波一模一样,都采用卷积核从图像左上角开始,逐个计算对应位置的像素值,并从左至右、从上至下滑动卷积核,并计算出对应值,直至到达图像右下角,唯一的区别就是核值可能会不同。

cv2.boxFilter()函数

功能:用于对图像进行盒式滤波(也称为均值滤波或平均滤波)的函数。这个函数使用一个矩形窗口对图像进行卷积,窗口内所有像素值的平均值将替代锚点位置的像素值。

参数:

  • src: 输入图像,它可以是多通道的。
  • ddepth: 输出图像的所需深度。当参数值为 -1 时,表示输出图像与输入图像有相同的深度。
  • ksize: 核的大小。它是一个元组,表示滤波窗口的宽度和高度(如 (3, 3) 表示一个 3x3 的窗口)。核的大小必须是正奇数。
  • dst: 输出图像,它应该与输入图像有相同的大小和类型。这是一个可选参数。
  • anchor: 表示核的锚点(即核的中心点)在窗口中的位置。默认值是 (-1, -1),这意味着锚点位于窗口的中心。
  • normalize: 一个标志,指示在滤波时是否对窗口内的像素值进行归一化。如果设置为 True(默认值),则会对窗口内的像素值求和并除以窗口的面积,从而得到平均值。如果设置为 False,则直接对窗口内的像素值求和,不进行除法运算。
  • borderType: 边界类型,用于指定图像边界外像素的外推方法。这个参数在需要处理图像边界时很有用。它可以是诸如 cv2.BORDER_CONSTANT、cv2.BORDER_REFLECT 等的边界类型之一。当不指定时,默认使用 cv2.BORDER_DEFAULT。 

注意:当normalize设置为Ture时,那么均值滤波与方框滤波就毫无差别

3. 高斯滤波

前面两种滤波方式,卷积核内的每个值都一样,也就是说图像区域中每个像素的权重也就一样。高斯滤波的卷积核权重并不相同:中间像素点权重最高,越远离中心的像素权重越小。

还记得我们在自适应二值化里是怎么生成高斯核的吗?这里跟自适应二值化里生成高斯核的步骤是一样的,都是以核的中心位置为坐标原点,然后计算周围点的坐标,然后带入下面的高斯公式中。

下面公式看看就行,只需关注最后的卷积核:

比如有一张4*4的图片,现在使用一个3*3的卷积核进行均值滤波时,其过程如下所示:

对于边界的像素点,则会进行边界填充,以确保卷积核的中心能够对准边界的像素点进行滤波操作。默认使用BORDER_REFLECT_101的方式进行填充。

其滤波过程与上面两种滤波方式的滤波过程一样,都是用卷积核从图像左上角开始,逐个计算对应位置的像素值,并从左至右、从上至下滑动卷积核,直至到达图像右下角,唯一的区别就是核值不同。

cv2.GaussianBlur() 函数

功能:用于对图像进行高斯模糊处理的函数。该函数通过高斯核对图像进行卷积操作,从而达到模糊图像的效果。

参数:

  • src:输入图像,可以是灰度图像或彩色图像。它应该是一个 NumPy 数组,通常是通过 OpenCV 读取图像函数(如 cv2.imread())获得的。
  • ksize:高斯核的大小。它应该是一个正奇数,表示高斯核的宽和高。例如,(3, 3) 或 (5, 5)。通常,核大小越大,模糊效果越明显。
  • sigmaX:高斯核函数在 X 方向的标准偏差。这个参数控制着模糊的程度。标准偏差越大,模糊效果越强。通常,sigmaX 的值会设置为一个正数。
  • sigmaY:(可选)高斯核函数在 Y 方向的标准偏差。如果 sigmaY 为 0,则函数会根据 sigmaX 的值来计算 Y 方向的标准偏差,即 sigmaY = sigmaX。如果提供了 sigmaY,则它会独立地控制 Y 方向的模糊程度。
  • dst:(可选)输出图像。
  • borderType:(可选)边界类型。

效果对比

 非线性滤波方式

1. 中值滤波

中值又叫中位数,是所有数排序后取中间的值。中值滤波没有核值,而是在原图中从左上角开始,将卷积核区域内的像素值进行排序,并选取中值作为卷积核的中点的像素值。

 比如有一张4*4的图片,现在使用一个3*3的卷积核进行均值滤波时,其过程如下所示:

对于边界的像素点,则会进行边界填充,以确保卷积核的中心能够对准边界的像素点进行滤波操作。中值滤波使用的是BORDER_REPLICATE进行填充

通过卷积核在原图上从左上角滑动计算到右下角,从而得到新的4*4的图像的像素值。

cv2.medianBlur()函数

功能:用于对图像进行中值滤波的函数。中值滤波是一种非线性的滤波方法,它用像素点邻域内的中值替代该像素点的值,从而起到平滑图像、去除噪声的作用,特别是对于去除椒盐噪声(即图像中随机出现的黑色或白色像素点)非常有效。

参数:

  • src: 输入图像,可以是单通道、三通道等任意通道数的图像。图像的数据类型应该是 uint8、uint16 或 float32 之一。
  • ksize: 滤波器的大小(即邻域的大小),必须是一个大于 1 的奇数。例如,3、5、7 等。这个参数决定了在进行中值计算时考虑的像素范围。
  • dst:(可选)输出图像。

2. 双边滤波

模糊操作(低通滤波器)基本都会损失掉图像细节信息,尤其前面介绍的线性滤波器,图像的边缘信息很难保留下来。然而,边缘(edge)信息是图像中很重要的一个特征,所以这才有了双边滤波。

换而言之,双边滤波器可以保留更多 线性滤波器 无法保留的 边缘信息

双边滤波的基本思路是同时考虑将要被滤波的像素点的空域信息(周围像素点的位置的权重)和值域信息(周围像素点的像素值的权重)。为什么要添加值域信息呢?是因为假设图像在空间中是缓慢变化的话,那么临近的像素点会更相近,但是这个假设在图像的边缘处会不成立,因为图像的边缘处的像素点必不会相近。因此在边缘处如果只是使用空域信息来进行滤波的话,得到的结果必然是边缘被模糊了,这样我们就丢掉了边缘信息,因此添加了值域信息。

双边滤波采用了两个高斯滤波的结合,一个负责计算空间邻近度的权值(也就是空域信息),也就是上面的高斯滤波器,另一个负责计算像素值相似度的权值(也就是值域信息),也是一个高斯滤波器。其公式如下所示:

看不懂没关系,这些公式我们不需要关心,我贴着玩的,能看就看,看不了拉倒,嘿嘿~。

采用两个高斯滤波器,边缘像素填充时自然使用的是BORDER_REFLECT_101进行填充

cv2.bilateralFilter()函数

功能:用于图像去噪的一个函数,它能够在保留边缘特征的同时去除噪声。这个函数实现了双边滤波,这是一种非线性的、边缘保留的、降噪的滤波器。双边滤波器的关键思想是在空域上进行邻域加权平均,同时考虑像素之间的空间邻近关系和颜色(或强度)相似性,从而避免模糊边缘。

参数:

  • src‌ (InputArray): 输入图像,可以是灰度图像或彩色图像。
  • ‌d‌ (int): 邻域直径。如果它是非正数,则会被计算为 (sigmaSpace*2)。这个参数决定了滤波过程中每个像素的邻域大小。邻域是一个圆形区域,其半径等于 d/2(当 d 为奇数时)或 (d-1)/2(当 d 为偶数时,向下取整)。
  • ‌sigmaColor‌ (double): 颜色空间滤波器的 sigma 值。这个参数决定了滤波函数在颜色(或强度)空间上的标准差。较大的 sigmaColor 值意味着更宽的颜色范围将被视为相似,从而增强去噪效果,但也可能导致边缘模糊。参数越大,临近像素将会在越远的地方mix。
  • ‌sigmaSpace‌ (double): 坐标空间滤波器的 sigma 值。这个参数决定了滤波函数在空间(或位置)上的标准差。较大的 sigmaSpace 值意味着更远的像素将被纳入加权平均,从而增强平滑效果,但也可能导致边缘模糊。如果 d > 0,则 sigmaSpace 会根据 d 的值自动计算(尽管用户可以覆盖这个默认值)。参数越大,那些颜色足够相近的的颜色的影响越大。
  • ‌dst‌ (OutputArray): 输出图像,与输入图像具有相同的尺寸和类型。
  • ‌borderType‌ (int, optional): 边界像素的插值方法。

关于参数的选取:

  • 关于2个sigma参数:
    • 简单起见,可以令2个sigma的值相等;
      • 如果他们很小(小于10),那么滤波器几乎没有什么效果;
      • 如果他们很大(大于150),那么滤波器的效果会很强,使图像显得非常卡通化。
  • 关于参数d:
    • 过大的滤波器(d>5)执行效率低。
    • 对于实时应用,建议取d=5;
    • 对于需要过滤严重噪声的离线应用,可取d=9;

对比总结

  1. 在不知道用什么滤波器好的时候,优先高斯滤波,然后均值滤波
  2. 斑点和椒盐噪声优先使用中值滤波
    • 比如下面这张斑点噪声图,用中值滤波显然更好:

  3. 要去除噪点的同时尽可能保留更多的边缘信息,使用双边滤波
  4. 线性滤波方式(速度相对快):均值滤波、方框滤波、高斯滤波。
  5. 非线性滤波方式(速度相对慢):中值滤波、双边滤波。
  6. 在OpenCV中,除了中值滤波使用的是BORDER_REPLICATE进行填充之外,其他的滤波方法默认的是使用BORDER_REFLECT_101的方式进行填充。

相关文章:

10篇--图像噪点消除

概念 何为噪点? 噪点:指图像收到的一些干扰因素,通常是由图像采集设备、传输信道等因素造成的,表现为图像中随机的亮度,也可以理解为有那么一些点的像素值与周围的像素值格格不入。 常见的噪声类型 高斯噪声&#…...

在 Vue 2 中,在 <el-table> 中为每一行动态插入对应的 echart 组件

更新数据结构:确保每一行数据都包含需要绘制图表的数据(例如 demandRespList 和 timeList),以便为每行生成不同的图表。 修改 getTableDataPreview 方法:在获取数据后,您需要为每一行创建对应的图表配置。 在 <el-table-column> 中使用 slot-scope:使用 slot-scop…...

protobuf c++开发快速上手指南

1、环境准备 在c环境使用 protobuf&#xff0c;需要安装protobuf runtime以及protobuf的编译器&#xff1a;protoc&#xff0c;其作用如下表格&#xff1a; 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意&#xff1a;…...

【HTML】HTML动画时钟

今天分享一个比较有趣的HTML动画时钟&#xff0c;感兴趣的小伙伴可以自行上手体验一番&#xff0c;操作也非常简单&#xff0c;如下&#xff1a; 1. 实操 实践操作步骤&#xff1a; 创建一个文本文件 clock.txt将上述代码粘贴到 clock.txt 中。修改文件后缀&#xff0c;将文…...

2024年全国仿真创新应用大赛 | MWORKS助力“复杂系统数字仿真”赛道,获奖名单公布

2024年全国仿真创新应用大赛全国总决赛于近日圆满落幕。大赛由工业和信息化部人才交流中心主办&#xff0c;以“创新引领&#xff0c;铸就未来”为主题&#xff0c;来自全国的参赛院校、企业、医学科学单位、军事科学单位及仿真领域的科研院所共计422家、近1300余人参加了此次总…...

ionic V6 安装ios所需

npm install capacitor/ios添加ios平台 ruby要求3.0以上 rvm use ruby-3.1.0 --default npx cap add ios打开xcode看看创建的项目 npx cap open ios没有capacitor指定的位置, 估计之前pod(cocoapods)安装搞得Ruby环境很乱了......cocoapods整的我麻了... App/App/capacitor…...

Docker Compose 多应用部署 一键部署

介绍 Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器&#xff0c;帮助我们实现多个相互关联的Docker容器的快速部署。 如&#xff1a;springbootmysqlnginx 如果一个个去部署他会非常的麻烦&#xff0c;这时候可以选择Docker …...

ubuntu20.04安装qt creator

以上三种&#xff0c;选择其一安装即可 回答1&#xff1a; 您可以按照以下步骤在ubuntu 20.04上安装Qt Creator&#xff1a; 打开终端并输入以下命令以更新软件包列表&#xff1a; sudo apt update 安装Qt Creator和Qt库&#xff1a; sudo apt install qtcreator qt5-def…...

经典NLP案例 | 推文评论情绪分析:从数据预处理到模型构建的全面指南

NLP经典案例&#xff1a;推文评论情绪提取 项目背景 “My ridiculous dog is amazing.” [sentiment: positive] 由于所有推文每秒都在传播&#xff0c;很难判断特定推文背后的情绪是否会影响一家公司或一个人的品牌&#xff0c;因为它的病毒式传播&#xff08;积极&#xff0…...

蓝卓生态说 | 捷创技术李恺和:把精细管理和精益生产做到极致

成功的产品离不开开放式创新和生态协同的力量。近年来&#xff0c;蓝卓坚持“平台生态"战略&#xff0c;不断加码生态&#xff0c;提出三个层次的开源开放生态计划&#xff0c;举办"春风行动”、“生态沙龙"等系列活动&#xff0c;与生态伙伴共生、共创、共同推…...

启发式搜索算法和优化算法的区别

启发式搜索算法和优化算法在计算机科学中都有广泛的应用&#xff0c;但它们之间存在一些明显的区别。 一、定义与核心思想 启发式搜索算法 定义&#xff1a;启发式搜索算法是一类基于经验和直觉的问题求解方法&#xff0c;通过观察问题的特点&#xff0c;并根据某种指…...

生成树协议STP工作步骤

第一步&#xff1a;选择根桥 优先级比较&#xff1a;首先比较优先级&#xff0c;优先级值越小的是根桥MAC地址比较&#xff1a;如果优先级相同&#xff0c;则比较MAC地址。MAC地址小的是根桥。 MAC地址比较的时候从左往右&#xff0c;一位一位去比 第二步&#xff1a;所有非根…...

批量合并多个Excel到一个文件

工作中&#xff0c;我们经常需要将多个Excel的数据进行合并&#xff0c;很多插件都可以做这个功能。但是今天我们将介绍一个完全免费的独立软件【非插件】&#xff0c;来更加方便的实现这个功能。 准备Excel 这里我们准备了两张待合并的Excel文件 的卢易表 打开的卢易表软件…...

如何在vue中实现父子通信

1.需要用到的组件 父组件 <template><div id"app"><BaseCount :count"count" changeCount"cahngeCount"></BaseCount></div> </template><script> import BaseCount from ./components/BaseCount.v…...

强化学习Q-learning及其在机器人路径规划系统中的应用研究,matlab代码

一、Q-learning 算法概述 Q-learning 是一种无模型的强化学习算法&#xff0c;它允许智能体&#xff08;agent&#xff09;在没有环境模型的情况下通过与环境的交互来学习最优策略。Q-learning的核心是学习一个动作价值函数&#xff08;Q-function&#xff09;&#xff0c;该函…...

【算法】EWMA指数加权移动平均绘制平滑曲线

EWMA&#xff08;Exponentially Weighted Moving Average&#xff0c;指数加权移动平均&#xff09;是一种常用的时间序列平滑技术&#xff0c;特别适用于对过去数据给予不同的权重。以下是对EWMA算法的详细介绍&#xff1a; 一、核心思想 EWMA算法的核心思想是通过指数衰减来…...

jenkins harbor安装

Harbor是一个企业级Docker镜像仓库‌。 文章目录 1. 什么是Docker私有仓库2. Docker有哪些私有仓库3. Harbor简介4. Harbor安装 1. 什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub&#xff0c;而与Dock…...

行为树详解(4)——节点参数配置化

【分析】 行为树是否足够灵活强大依赖于足够丰富的各类条件节点和动作节点&#xff0c;在实现这些节点时&#xff0c;不可避免的&#xff0c;节点本身需要有一些参数供配置。 这些参数可以分为静态的固定值的参数以及动态读取设置的参数。 静态参数直接设置为Public即可&…...

在数字孪生开发领域threejs现在的最新版本已经更新到多少了?

在数字孪生开发领域three.js现在的最新版本已经更新到多少了&#xff1f; 在数字孪生开发领域&#xff0c;three.js作为一款强大的JavaScript 3D库&#xff0c;广泛应用于Web3D可视化、智慧城市、智慧园区、数字孪生等多个领域。随着技术的不断进步和需求的日益增长&#xff0…...

UE材质常用节点

Desaturation 去色 饱和度控制 Panner 贴图流动 快捷键P Append 附加 合并 TexCoord UV平铺大小 快捷键U CustomRotator 旋转贴图 Power 幂 色阶 Mask 遮罩 Lerp 线性插值 快捷键L Abs 绝对值 Sin / Cos 正弦/余弦 Saturate 约束在0-1之间 Add 相加 快捷键A Subtra…...

burp(2)利用java安装burpsuite

BurpSuite安装 burpsuite 2024.10专业版&#xff0c;已经内置java环境&#xff0c;可以直接使用&#xff0c; 支持Windows linux macOS&#xff01;&#xff01;&#xff01; 内置jre环境&#xff0c;无需安装java即可使用&#xff01;&#xff01;&#xff01; bp2024.10下载…...

33.攻防世界upload1

进入场景 看看让上传什么类型的文件 传个木马 把txt后缀改为png 在bp里把png改为php 上传成功 用蚁剑连接 在里面找flag 得到...

17、ConvMixer模型原理及其PyTorch逐行实现

文章目录 1. 重点2. 思维导图 1. 重点 patch embedding : 将图形分割成不重叠的块作为图片样本特征depth wise point wise new conv2d : 将传统的卷积转换成通道隔离卷积和像素空间隔离两个部分&#xff0c;在保证精度下降不多的情况下大大减少参数量 2. 思维导图 后续再整…...

【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

C# winfrom 异步加载数据不影响窗体UI

文章目录 前言一、背景介绍二、使用BackgroundWorker组件实现异步加载数据2.1 添加BackgroundWorker组件2.2 处理DoWork事件 三、延伸内容3.1 错误处理和进度报告3.2 线程安全 结束语优质源码分享 C# winfrom 异步加载数据不影响窗体UI&#xff0c;在 WinForms 应用程序中&…...

Flutter Navigator2.0的原理和Web端实践

01 背景与动机 在Navigator 2.0推出之前&#xff0c;Flutter主要通过Navigator 1.0和其提供的 API&#xff08;如push(), pop(), pushNamed()等&#xff09;来管理页面路由。然而&#xff0c;Navigator 1.0存在一些局限性&#xff0c;如难以实现复杂的页面操作&#xff08;如移…...

latex设置引用顺序

在 LaTeX 中&#xff0c;引用的顺序通常是由所选择的 参考文献样式&#xff08;bibliographystyle&#xff09; 决定的。如果你希望根据引用的顺序排列参考文献&#xff0c;可以选择合适的参考文献样式&#xff0c;并按照以下步骤进行设置。 常见的几种引用顺序设置方式有&…...

有效的括号(字节面试题 最优解)

题目来源 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号…...

短视频矩阵源码开发部署全流程解析

在当今的数字化时代&#xff0c;短视频已成为人们娱乐、学习和社交的重要方式。短视频矩阵系统的开发与部署&#xff0c;对于希望在这一领域脱颖而出的企业和个人而言&#xff0c;至关重要。本文将详细阐述短视频矩阵源码的开发与部署流程&#xff0c;并附上部分源代码示例&…...

iOS 环境搭建教程

本文档将详细介绍如何在 macOS 上搭建 iOS 开发环境&#xff0c;以便进行 React Native 开发。&#xff08;为了保证环境一致 全部在网络通畅的情况下运行&#xff09; 1. 安装 Homebrew Homebrew 是 macOS 的包管理工具&#xff0c;我们将通过它来安装开发所需的工具。 安装…...

element-ui实现table表格的嵌套(table表格嵌套)功能实现

最近在做电商类型的官网&#xff0c;希望实现的布局如下&#xff1a;有表头和表身&#xff0c;所以我首先想到的就是table表格组件。 表格组件中常见的就是&#xff1a;标题和内容一一对应&#xff1a; 像效果图中的效果&#xff0c;只用基础的表格布局是不行的&#xff0c;因…...

如何使mysql数据库ID从0开始编号——以BiCorpus为例

BiCorpus是北京语言大学韩林涛老师研制一款在线语料库网站&#xff0c;可以通过上传tmx文件&#xff0c;实现在线检索功能&#xff0c;程序在github上开源免费&#xff0c;深受广大网友的喜欢。 在使用过程中&#xff0c;我发现我上传的语言资产经历修改后&#xff0c;mysql的…...

亮相AICon,火山引擎边缘云揭秘边缘AI Agent探索与实践

12月13-14日&#xff0c;AICon 全球人工智能开发与应用大会在北京成功举办。火山引擎边缘智能技术负责人谢皓受邀出席大会&#xff0c;以《AI Agent 在边缘云的探索与实践》为主题&#xff0c;与全球 AI 领域的资深专家&#xff0c;共同深入探讨大模型落地、具身智能、多模态大…...

让文案生成更具灵活性/chatGPT新功能canvas画布编辑

​ ​ OpenAI最近在2024年12月发布了canvas画布编辑功能&#xff0c;这是一项用途广泛的创新工具&#xff0c;专为需要高效创作文案的用户设计。 无论是职场人士、学生还是创作者&#xff0c;这项功能都能帮助快速生成、优化和编辑文案&#xff0c;提升效率的同时提高内容质量…...

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…...

windows C#-实现具有自动实现属性的轻型类

下面演示如何创建一个不可变的轻型类&#xff0c;该类仅用于封装一组自动实现的属性。 当你必须使用引用类型语义时&#xff0c;请使用此种构造而不是结构。 可通过以下方法来实现不可变的属性&#xff1a; 仅声明 get 访问器&#xff0c;使属性除了能在该类型的构造函数中可…...

深度学习之Autoencoders GANs for Anomaly Detection 视频异常检测

在视频异常检测(Video Anomaly Detection)任务中,Autoencoders(自编码器) 和 GANs(生成对抗网络) 是常用的深度学习模型,它们在检测视频中的异常事件(如入侵、破坏、非法行为等)方面发挥着重要作用。通过分析视频帧的时空特征,这些模型能够识别出与正常行为模式不同…...

实现按键按下(低电平)检测到下降沿

按照流程进行编程 步骤1&#xff1a; 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…...

【21天学习AI底层概念】day5 机器学习的三大类型不能解决哪些问题?

机器学习的三大类型——监督学习、无监督学习和强化学习&#xff0c;虽然可以应用于许多问题&#xff0c;但并非所有问题都能通过这些方法有效解决。每种类型的机器学习都有其局限性&#xff0c;具体如下&#xff1a; 1. 监督学习 (Supervised Learning) 监督学习是通过训练数…...

八股—Java基础(一)

目录 一、Java概述 1、Java语言有哪些特点&#xff1f; 2、JVM、JDK、JRE有什么区别&#xff1f; 3、什么是跨平台性&#xff1f;原理是什么 4、Java和C有什么关系&#xff0c;它们有什么区别&#xff1f; 5、JVM、JRE和JDK的关系是什么&#xff1f; 6、什么是字节码? …...

PWM调节DCDC参数计算原理

1、动态电压频率调整DVFS SOC芯片的核电压、GPU电压、NPU电压、GPU电压等&#xff0c;都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS&#xff08;Dynamic Voltage and Frequency scaling&#xff09;&#xff0c;优化性能和功耗。 比如某SOC在…...

设计一个基础JWT的多开发语言分布式电商系统

在设计一个分布式电商系统时&#xff0c;保证系统的可扩展性、性能以及跨语言的兼容性是至关重要的。随着微服务架构的流行&#xff0c;越来越多的电商系统需要在多个服务间共享信息&#xff0c;并且保证服务的安全性。在这样的场景下&#xff0c;JSON Web Token&#xff08;JW…...

基础开发工具-编辑器vim

vim操作键盘图 下图是比较基础的vim操作键盘图 &#xff08;IDE例子&#xff09; vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;⽽且还有⼀些新的特性在⾥⾯。例如语法加亮&a…...

C#速成(文件读、写操作)

导包 using System.IO;1、写入文件&#xff08;重要&#xff09; StreamWriter sw new StreamWriter("C:\Users\29674\Desktop\volumn.txt");//创建一个TXT的文件 sw.WriteLine(textBox2.Text);//写入文件的内容 sw.Close();//关闭2、读取文件&#xff08;不重要&…...

11、多态

1、多态介绍 1.1、认识多态 “一个接口&#xff0c;多种状态”。 接口在运行期间&#xff0c;根据传入的参数来决定具体调用的函数&#xff0c;最终采取不同的执行策略。 比如&#xff1a;一个系统的后台&#xff0c;管理员登录后进入的界面和普通用户进入的界面是不一样的。 …...

bain.js(十二):RNN神经网络实战教程 - 音乐乐谱生成 -人人都是作曲家~

系列文章&#xff1a; &#xff08;一&#xff09;&#xff1a;可以在浏览器运行的、默认GPU加速的神经网络库概要介绍&#xff08;二&#xff09;&#xff1a;项目集成方式详解&#xff08;三&#xff09;&#xff1a;手把手教你配置和训练神经网络&#xff08;四&#xff09…...

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子&#xff1b;138度的低温锡&#xff08;锡膏&#xff09;&#xff0c; 第一次使用&#xff0c;直接拿东西挑一点涂在引脚上&#xff0c;不知道多少合适&#xff0c;加热台加热到260左右&#xff0c;放在上面观察锡融化&#…...

java_多态

问题引导 使用传统的方法来解决&#xff08;private 属性&#xff09;传统的方法带来的问题是什么? 如何解决? 问题是&#xff1a; 代码的复用性不高&#xff0c;而且不利于代码维护 解决方案&#xff1a; 引出我们要讲解的多态 多态的基本介绍 方法或对象具有多种形态。是…...

如何设计一款智能手表的电子系统:从选择MCU到PCB设计

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;趣享先生的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&…...

Vue Web开发(七)

1. echarts介绍 echarts官方文档 首先我们先完成每个页面的路由&#xff0c;之前已经有home页面和user页面&#xff0c;缺少mail页面和其它选项下的page1和page2页面。在view文件夹下新建mail文件夹&#xff0c;新建index.vue&#xff0c;填充user页面的内容即可。在view下新建…...