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

图像预处理-图像噪点消除

一.基本介绍

噪声:指图像中的一些干扰因素,也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。

滤波器:也可以叫做卷积核

- 低通滤波器是模糊,高通滤波器是锐化

- 低通滤波器就是允许低频信号通过,在图像中边缘噪点都相当于高频部分,所以低通滤波器用于去除噪点、平滑和模糊图像。高通滤波器则反之,用来增强图像边缘,进行锐化处理。

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

这是高斯噪声


这是椒盐噪声,有很多黑白的或者孤立的小点


1.1 均值滤波

cv.blur(img, ksize)

参数:

- ksize:代表卷积核的大小

取的是卷积核区域内元素的均值

        对于边界的像素点,则会进行边界填充,以确保卷积核的中心能够对准边界的像素点进行滤波操作。在OpenCV中,默认的是使用BORDER_REFLECT_101的方式进行填充,下面的滤波方法中除了中值滤波使用的是BORDER_REPLICATE进行填充之外,其他默认也是使用这个方式进行填充

import cv2 as cvimg = cv.imread('../images/lvbo2.png')# 均值滤波,用3*3的卷积核
blur = cv.blur(img, (3, 3))cv.imshow('img', img)
cv.imshow('blur', blur)
cv.waitKey(0)
cv.destroyAllWindows()

1.2 方框滤波

cv.boxFilter(img, ddepth,ksize, normalize)

参数:

- ksize:代表卷积核的大小

- ddepth:输出图像的深度,-1代表使用原图像的深度。

指在每个像素点所使用的位数(bit depth),也就是用来表示图像中每一个像素点的颜色信息所需的二进制位数。图像深度决定了图像能够表达的颜色数量或灰度级。

- normalize:当normalizeTrue的时候,方框滤波就是均值滤波,权重就等于1/9;normalizeFalse的时候,每个像素权重都是1,相当于求区域内的像素和,超出部分取模运算。

import cv2 as cvimg = cv.imread('../images/lvbo2.png')# 方框滤波,用3*3的卷积核,类似均值滤波
box = cv.boxFilter(img, -1,(3, 3),normalize=True)# 真正的方框滤波
box1 = cv.boxFilter(img, -1,(3, 3), normalize=False)cv.imshow('img', img)
cv.imshow('box', box)
cv.imshow('box1', box1)
cv.waitKey(0)
cv.destroyAllWindows()

跟均值滤波很像

        可以看到这里的方框滤波显示图片是很接近白色的,因为其将像素点周围的像素权重都设为1,然后相加得到该像素的值,所以很多都超过了255而进行了取模操作。

1.2 高斯滤波

cv.GaussianBlur(img, ksize, sigmaX)

参数:

- sigmaX

就是高斯函数里的值,σx值越大模糊效果越明显。高斯滤波相比均值滤波效率要慢,但可以有效消除高斯噪声,能保留更多的图像细节,所以经常被称为最有用的滤波器。

通过使用高斯函数(正态分布)作为卷积核来对图像进行模糊处理。

import cv2 as cvimg = cv.imread('../images/lvbo2.png')# 高斯,用3*3的卷积核
Gauss = cv.GaussianBlur(img, (3, 3), 1)cv.imshow('img', img)
cv.imshow('Gauss', Gauss)cv.waitKey(0)
cv.destroyAllWindows()

1.3 中值滤波

cv.medianBlur(img, ksize)

        中值滤波没有核值,而是在原图中从左上角开始,将卷积核区域内的像素值进行排序,并选取中值作为卷积核的中点的像素值。就是用区域内的中值来代替本像素值,所以那种孤立的斑点,如0或255很容易消除掉,适用于去除椒盐噪声斑点噪声

import cv2 as cv# 导入椒盐噪声图片
img = cv.imread('../images/lvbo3.png')# 中值滤波,注意这里的3
median = cv.medianBlur(img, 3)cv.imshow('img', img)
cv.imshow('median', median)cv.waitKey(0)
cv.destroyAllWindows()

        其实你会注意到,中值滤波的ksize为啥是个整数呢,前面的都是(x,x)。因为中值滤波是非线性的,且没有核值不依赖卷积核权重。

1.4 双边滤波

cv.bilateralFilter(img,ksize,d,sigmaColor,sigmaSpace)

参数:

- d:过滤时周围每个像素领域的直径,这里已经设置了核大小。d=9===>9x9

- sigmaColor:在color space值域空间)中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。较大的sigmaColor意味着更大的颜色差异将被允许参与到加权平均中.

- sigmaSpace:在coordinate space坐标空间)中过滤sigma。这个参数是坐标空间中的标准差,决定了像素位置对滤波结果的影响程度。

双边滤波的基本思路是同时考虑将要被滤波的像素点的空域(空间)信息(周围像素点的位置的权重)和值域信息(周围像素点的像素值的权重)。因为在边缘处,临近的像素点差异会比较大,如果只是使用空域信息来进行滤波的话,得到的结果必然是边缘被模糊了,这样我们就丢掉了边缘信息。这也是一种非线性滤波

import cv2 as cvimg = cv.imread('../images/lvbo2.png')# 双边滤波
sb = cv.bilateralFilter(img, 9, 100, 100)cv.imshow('img', img)
cv.imshow('sb', sb)cv.waitKey(0)
cv.destroyAllWindows()

注意:

关于2个sigma参数:

简单起见,可以令2个sigma的值相等;

如果他们很小(小于10),那么滤波器几乎没有什么效果

如果他们很大(大于150),那么滤波器的效果会很强,使图像显得非常卡通化

关于参数d

过大的滤波器(d>5)执行效率低。

对于实时应用,建议取d=5

对于需要过滤严重噪声的离线应用,可取d=9;

二.图像梯度处理

2.1 图像梯度

        把图片想象成连续函数,因为边缘部分的像素值是与旁边像素有明显区别,所以对图片局部求极值,就可以得到整幅图片的边缘信息了。不过图片是二维的离散函数,导数就变成了差分,这个差分就称为图像的梯度

2.2 垂直边缘提取

        这个核是用来提取图片中的垂直边缘(右侧边缘,若提取左边缘卷积核中正负号换一下就好)的,中间像素就是这个卷积核卷积的结果

        当前列左右两侧的元素进行差分,由于边缘(当前列)的值明显小于(或大于)周边像素,所以边缘(当前列)的差分结果会明显不同,这样就提取出了垂直边缘。简单理解,就是在‘1’位置右边的像素值相对于‘-1’位置左边的像素值的差距会显示在中间的像素中,所以中间的列就是旁边两列的垂直差分

来介绍一下二维卷积函数:

cv2.filter2D(src, ddepth, kernel)

- src: 输入图像,一般为numpy数组。

- ddepth: 输出图像的深度,可以是负值(表示与原图相同)、正值或其他特定值(常用-1 表示输出与输入具有相同的深度)。

- kernel: 卷积核,一个二维数组(通常为奇数大小的方形矩阵),用于计算每个像素周围邻域的加权和。

import cv2 as cv
import numpy as np# 模拟一张图像,灰度图
img=np.array([[100,102,109,110,98,20,19,18,21,22],[109,101,98,108,102,20,21,19,20,21],[109,102,105,108,98,20,22,19,19,18],[109,98,102,108,102,20,23,19,20,22],[109,102,105,108,98,20,22,19,20,18],[100,102,108,110,98,20,19,18,21,22],[109,101,98,108,102,20,22,19,20,21],[109,102,108,108,98,20,22,19,19,18],],dtype=np.float32)
# 定义卷积核,
kernel=np.array([[-1,0,1],[-2,0,2],[-1,0,1]],dtype=np.float32)
# 二维卷积操作
img2=cv.filter2D(img,-1,kernel)
# 打印卷积后的图
print(img2)

[[   0.   -4.   30.  -14. -356. -320.   -6.    2.   12.    0.]
 [   0.  -17.   28.  -10. -354. -317.   -5.   -3.    7.    0.]
 [   0.  -26.   29.  -10. -352. -312.   -4.  -10.    3.    0.]
 [   0.  -22.   32.  -14. -352. -310.   -4.  -11.    4.    0.]
 [   0.   -7.   30.  -24. -354. -310.   -5.   -5.    5.    0.]
 [   0.    1.   29.  -23. -356. -314.   -6.    0.    9.    0.]
 [   0.  -15.   28.  -12. -354. -315.   -5.   -5.    7.    0.]
 [   0.  -24.   26.  -12. -352. -312.   -4.  -10.    2.    0.]]

        这里的值就是用上面的卷积核计算的,其中边缘由于使用边界反射101进行填充,左右两边的差分为0,也就是无梯度变化。然后中间两列有着超出255的最大数值,这就会作为边缘被提取出来。

        差分后值的符号正负代表梯度的方向,差分值实际应该取绝对值,毕竟我们只是想看数值大小来提取边缘。值超过了255都算(+-)255,即使是负号。

如果使用的是一张真正的图片进行特征提取,建议转化为灰度图(单通道)方便计算。

2.3 水平边缘提取

把上面的卷积矩阵进行转置进行操作就可以了。

2.4 Sobel算子

上面的两个卷积核都叫做Sobel算子,只是方向不同。这个算子可以两方向上特征结合提取

总梯度是:

sobel_image = cv2.Sobel(src, ddepth, dx, dy, ksize)

- src:通常应该是一个单通道图像,因为 Sobel 算子是基于像素亮度梯度计算的。

- dx,dy:当组合为dx=1,dy=0时求x方向的一阶导数,在这里,设置为1意味着垂直特征提取,因为其做的是水平方向梯度。(若同时为1,通常得不到想要的结果,两个方向的处理不是太好)

- ksize:Sobel算子的大小,可选择3、5、7,默认为3。

import cv2 as cvpig = cv.imread('../images/pig.png', cv.IMREAD_GRAYSCALE)# 选择垂直特征提取
sobel_img1 = cv.Sobel(pig, -1, 1, 0, 3)# 选择水平特征提取
sobel_img2 = cv.Sobel(pig, -1, 0, 1, 3)# 两特征提取
sobel = cv.Sobel(pig, -1, 1, 1, 3)cv.imshow('pig', pig)
cv.imshow('sobel_img1', sobel_img1)
cv.imshow('sobel_img2', sobel_img2)
cv.imshow('sobel', sobel)
cv.waitKey(0)
cv.destroyAllWindows()

2.5  Laplacian算子

其用的是二阶导

也将两个方向的梯度结合在一起计算,下面是其卷积核:

有些时候考虑斜对角元素就会变成:

cv2.Laplacian(src, ddepth)

Laplacian算子是二阶边缘检测的典型代表,一/二阶边缘检测各有优缺点。

import cv2 as cvpig = cv.imread('../images/pig.png', cv.IMREAD_GRAYSCALE)La = cv.Laplacian(pig, -1)
cv.imshow('Original', pig)
cv.imshow('Laplacian', La)
cv.waitKey(0)
cv.destroyAllWindows()

相关文章:

图像预处理-图像噪点消除

一.基本介绍 噪声:指图像中的一些干扰因素,也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。 滤波器:也可以叫做卷积核 - 低通滤波器是模糊,高通滤波器是锐化 - 低通滤波器就…...

PP-OCR的安卓端部署

EMO了几天 我浪费了几天的生命,去研究PP-OCR的模型微调、从训练模型导出预测模型,结果一个坑接着一个坑,没有善终。 找了好多资料,得到一些负面信息,比如说飞浆的团队修复问题不及时啦,代码仓库有好多年不…...

2048小游戏C++板来啦!

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家好呀,我是PingdiGuo_guo,今天我们来学习如何用C编写一个2048小游戏。 文章目录 1.2048的规则 2.步骤实现 2.1: 初始化游戏界面 2.1.1知识点 2.1.2: 创建游戏界面 2.2: 随机…...

研0大模型学习(第四、五天)

学习CSDN教程:VSCode Debug指南 但里面貌似主要是针对nodejs的,所以我在 CSDN教程:VSCode调试python程序 中学习,刚开始调试报错python版本太低,于是我安装了旧版本的pythondebugger,再把python解释器从原…...

编程规范之整数运算

在表达式中混用有符号数和无符号数时,可能会因隐式转换而导致非预期的结果。因此应尽量在表达式中使用相同符号类型的 变量。 对于无法使用相同符号类型的场景,应将不同类型的变量显式转换为相同类型,当表达式中的无符号数隐式转换为另一个有…...

【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南

MATLAB Gurobi YALMIP 综合优化教程(进阶) 本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。 一、工具概览 1.…...

C++17 信号量模拟实现

C17 信号量模拟实现 一、实现原理 C17 标准库没有原生信号量(C20才有)&#xff0c;但可以通过 std::mutex std::condition_variable 模拟实现。以下是核心逻辑&#xff1a; #include <mutex> #include <condition_variable>class CountingSemaphore { private:…...

LINUX学习——守护进程的含义及编程实现

实验目的 理解守护进程的含义。掌握编程实现守护进程的主要步骤。 实验步骤 守护进程的含义&#xff1a; 守护进程是运行在后台的一种特殊进程&#xff0c;独立于控制终端&#xff0c;周期性地执行任务或等待处理事件。守护进程通常以 d 结尾&#xff0c;如 httpd、sshd 等。…...

Json 在线格式化 - 加菲工具

Json 在线格式化 打开网站 加菲工具 选择“Json 在线格式化” 或者直接进入 https://www.orcc.top/tools/json 输入Json&#xff0c;点击左上角的“格式化”按钮 得到格式化后的结果...

final关键字带来的问题

定义了一个配置类&#xff1a; public class EsignConfig { public static final String EsignOrgId "*****"; // 应用ID public static final String EsignAppId "*****"; // 应用密钥 public static final String EsignAppSecret…...

Flash存储器(一):接口标准全解析

目录 一.接口类型与协议标准 二.应用场景 Flash存储器的接口设计直接影响其性能、应用场景及系统集成复杂度。以下从接口类型、协议标准及应用场景三个方面进行系统阐述。 一.接口类型与协议标准 Flash接口类型与协议标准 序号接口类型协议标准特点1并行接口…...

第18周:对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 问题&#xff1a;在上一章代码中是ResNeXt-50的残差单元&#xff0c;问题:如果conv shortcutFalse那么在执行“xAdd0)…“语句时&#xff0c;通道数不一致的&…...

Django 结合 Vue 实现简单管理系统的详解

以下是一个 Django 结合 Vue 实现简单管理系统的详细步骤及示例代码: 项目整体架构思路 后端:使用 Django 搭建 RESTful API,负责数据的存储和处理。前端:使用 Vue 构建用户界面,通过调用后端 API 实现数据的展示、添加、修改和删除等操作。步骤 1:创建 Django 项目和应…...

ValueError: model.embed_tokens.weight doesn‘t have any device set

ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...

公务员行测之速算分数记忆检验-无答案版本

前言 这一篇是根据百分数&#xff0c;默写分数&#xff0c;我发现我看见百分数有点想不到分数 速算之百分数记忆检验 50 % \ 50\% 50% 33.3 % \ 33.3\% 33.3% 25 % \ 25\% 25% 20 % \ 20\% 20% 16.7 % \ 16.7\% 16.7% 14.3 % \ 14.3\% 14.3% 12.5 % \ 12.5\% 1…...

大模型面经 | DeepSpeed中ZeRO-1、ZeRO-2和ZeRO-3的区别是什么?

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务是一个不可避免的话题。随着业务复杂度的提升&#xff0c;单体应用逐渐演变为多个微服务&#xff0c;如何保证跨服务的数据一致性成为…...

大语言模型减少幻觉的常见方案

什么是大语言模型的幻觉 大语言模型的幻觉&#xff08;Hallucination&#xff09;是指模型在生成文本时&#xff0c;输出与输入无关、不符合事实、逻辑错误或完全虚构的内容。这种现象主要源于模型基于概率生成文本的本质&#xff0c;其目标是生成语法合理、上下文连贯的文本&…...

方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】

在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…...

shiro使用

shiro是apache提供的一种安全框架。他可以将登录&#xff0c;权限这一方面简单化。 使用shiro需要引入 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.9.0</version></depend…...

Spring Boot日志系统详解:Logback与SLF4J的默认集成

大家好呀&#xff01;&#x1f44b; 今天我们来聊聊Spring Boot中一个超级重要但又经常被忽视的功能——日志系统&#xff01; 一、日志系统的重要性 首先&#xff0c;咱们得明白为什么日志这么重要&#xff1f;&#x1f937;‍♂️ 想象一下&#xff0c;你正在玩一个超级复…...

基于SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

AI象棋 3.0 |AI自动下象棋工具,破译残局,自动帮助下棋,内置视频教程

Ai象棋是一款自动识别棋盘并分析下棋局势的工具&#xff0c;它能够自动化操作&#xff0c;帮助用户学习象棋知识。该软件无限制使用、界面无广告简洁&#xff0c;并提供永久授权。数据库中挑选1到2个即可完全满足使用需求&#xff0c;不必全部下载&#xff0c;解压mt管理器即可…...

刘鑫炜履新共工新闻社新媒体研究院院长,赋能媒体融合新征程

2025年4月18日&#xff0c;大湾区经济网战略媒体共工新闻社正式对外宣布一项重要人事任命&#xff1a;聘任蚂蚁全媒体总编刘鑫炜为新媒体研究院第一任院长。这一举措&#xff0c;无疑是对刘鑫炜在新媒体领域卓越专业能力与突出行业贡献的又一次高度认可&#xff0c;也预示着共工…...

学习型组织与系统思考

真正的学习型组织不是只关注个人的学习&#xff0c;而是关注整个系统的学习。—彼得圣吉 在这两年里&#xff0c;越来越多的企业开始询问是否可以将系统思考的内容内化给自己的内训师&#xff0c;进而在公司内部进行教学。我非常理解企业这样做的动机&#xff0c;毕竟内部讲师…...

mysql中优先使用datetime存储时间

基于大模型的问答进行了记录。 对为甚timestamp不如datetime好用做了深入了解&#xff0c;再此记录 范围广 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ 而 timestamp 仅支持’1970-01-01 00:00:01’ 到 ‘2038-01-19 03:14:07’ UTC, 存在2038年问题, 不适合长期存…...

【Linux】深入理解Linux文件系统:从C接口到内核设计哲学

文章目录 前言一、C语言中的文件接口1. 文件指针&#xff08;句柄&#xff09;FILE*以写方式打开文件&#xff0c;若文件不存在会新建一个文件W写入方式&#xff0c;在打开文件之前都会将文件内容全部清空追加写方式&#xff0c;其用法与写方法一致&#xff0c;不同在于a方法可…...

前端零基础入门到上班:Day7——表单系统实战全解析

&#x1f9e9;前端零基础入门到上班&#xff1a;Day7——表单系统实战全解析 ✅ 目标&#xff1a;不仅掌握 HTML 表单标签&#xff0c;更深入理解其在实战中的作用、验证方式、美化技巧与 JS 联动&#xff0c;为后续接入 Vue、后端接口打下坚实基础。 &#x1f31f; 一、HTML 表…...

阀门轴承电动车工件一键精修软件

若需定制开发“ComfyUI意见精修软件” 技术栈建议&#xff1a; 前端&#xff1a;React/Vue Figma插件API&#xff08;直接读取设计稿&#xff09;。 后端&#xff1a;Node.js/Python NLP库&#xff08;spaCy/NLTK&#xff09;。 数据库&#xff1a;MongoDB&#xff08;存储…...

【疑难杂症】【VS Code】VS Code连接不上远程服务器

【疑难杂症】【VS Code】VS Code连接不上远程服务器 经过多轮资料查询和测试&#xff0c;这种时候有三种可能&#xff1a; 可能原因1&#xff1a;服务器磁盘空间不足&#xff0c;无法创建服务器连接。 解决方案&#xff1a;清理磁盘空间&#xff0c;尤其是/tmp文件所在的磁盘。…...

Word 中“母版页”的等效机制

Word 和 PowerPoint 不太一样——**Word 实际上没有像 PowerPoint 那样的“母版页&#xff08;Master Page&#xff09;”**功能。但它有1个和“母版页”功能类似的东西&#xff0c;可能造成你看到的“校徽自动出现在每一页”的现象&#xff1a; ✅ Word 中“母版页”的等效机制…...

大模型时代:AI应用的变革与挑战

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

C++ (菱形继承,通用接口 ,多态介绍)

菱形继承 class A{public :int a;};class B:public A{};class C:public A{};class D:public B,public C{public:void function(){a200;} };int main(){D object;// object.a100; 如果如此使用会产生报错 会导致一个成员在类D中出现两次&#xff0c;产生歧义&#xff0c;浪…...

vue3+vite 实现.env全局配置

首先创建.env文件 VUE_APP_BASE_APIhttp://127.0.0.1/dev-api 然后引入依赖&#xff1a; pnpm install dotenv --save-dev 引入完成后&#xff0c;在vite.config.js配置文件内加入以下内容&#xff1a; const env dotenv.config({ path: ./.env }).parsed define: { // 将…...

4.18日学习--引用

引用是变量的别名&#xff0c;它为已存在的变量提供了一个新的名称&#xff0c;对引用的操作实际上就是对其所引用变量的操作。引用在定义时必须初始化&#xff0c;且一旦初始化后就不能再引用其他变量。 #include <iostream> using namespace std;//引用做函数的返回值…...

poj1067 取石子游戏 威佐夫博弈

题目 有两堆石子&#xff0c;数量任意&#xff0c;可以不同。游戏开始由两个人轮流取石子。游戏规定&#xff0c;每次有两种不同的取法&#xff0c; 一是可以在任意的一堆中取走任意多的石子&#xff1b;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者…...

文件二进制读写和文本读写以及编码解码

假如是utf8编码&#xff0c;windows系统 写&#xff1a;往键盘中写的字符会被utf8编码成字节写入文件。假如是文本写&#xff0c;\n会被替换为\r\n写入&#xff0c;结尾会加文件结束符EOF。假如是二进制写&#xff0c;\n就是\n&#xff0c;文件结尾也不会加什么EOF 读&#xff…...

Java学习手册:常见并发问题及解决方案

在Java并发编程中&#xff0c;开发者常常会遇到各种并发问题&#xff0c;这些问题可能导致程序行为不可预测、性能下降甚至程序崩溃。以下是一些常见的并发问题及其解决方案&#xff1a; 1.竞态条件&#xff08;Race Condition&#xff09; 竞态条件是指多个线程同时访问共享…...

幽灵依赖与常见依赖管理

文章目录 前言1. 演示&#xff1a;检测和修复幽灵依赖步骤1&#xff1a;安装 depcheck步骤2&#xff1a;在项目根目录运行 depcheck可能的输出步骤3&#xff1a;修复幽灵依赖 2. 依赖管理的好习惯 1. 场景设定现在有如下依赖需求&#xff1a; 2. 依赖冲突的表现3. 解决依赖冲突…...

第T7周:咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 VGG 网络优缺点分析&#xff1a; ● 优点&#xff1a; 结构简洁统一&#xff1a;整张网络结构统一&#xff0c;只使用 33 的小卷积核和 22 的最大池化&…...

【MySQL数据库入门到精通】

文章目录 一、SQL分类二、DDL-数据库操作1.查询2.创建数据库3.删除数据库4.使用数据库 三、DDL-表操作1.查询 一、SQL分类 根据功能主要分为DDL DML DQL DCL DDL:Date Definition Language数据定义语言&#xff1a;定义数据库&#xff0c;表和字段 DML:Date Manipulatin Lan…...

C++智能指针的知识!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习一下智能指针。 文章目录 1.智能指针的概念 2.智能指针的思想 3.智能指针的作用 3.1 自动内存管理 3.2 共享所有权 3.3 避免悬挂指针…...

4.6 实现重定向

本实战通过ServletDemo09类演示了Servlet中的重定向功能。该Servlet通过HttpServletResponse的sendRedirect方法实现页面跳转。在doPost方法中&#xff0c;根据请求参数username和password判断用户身份。若用户名为admin且密码为123456&#xff0c;则调用sendRedirect方法将页面…...

Linux中的管道

管道的概念 管道是一种进程间通信的方式。 管道是一种半双工通信机制&#xff0c;数据只能读或写&#xff0c;如果要读写同时进行就要创建两个管道 管道的类型 1、匿名管道PIPE&#xff1a;通常在亲缘进程中使用&#xff08;兄弟、父子&#xff09; 函数参考&#xff1a;匿名管…...

深入简出:KL散度、交叉熵、熵、信息量简介、交叉熵损失

学习这些的最终目的 1、量化两个概率分布的差异 2、推导交叉熵损失 一、KL散度 KL散度就是用来量化两个概论分布的差异&#xff0c;如何量化&#xff1f; 计算真实概论分布P信息量 和 估计概论分布为Q&#xff0c;但实际概率分布为P时信息量的差值 那么设&#xff0c;概率分…...

`peft`(Parameter-Efficient Fine-Tuning:高效微调)是什么

peft(Parameter-Efficient Fine-Tuning:高效微调)是什么 peft库是Hugging Face推出的用于高效参数微调的库,它能在不调整模型全部参数的情况下,以较少的可训练参数对预训练模型进行微调,从而显著降低计算资源需求和微调成本。以下从核心功能、优势、常见微调方法、使用场…...

Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(五)

一、每个阶段的 UAV—架构革新与限制突破 在 Microsoft Direct3D 11 中&#xff0c;计算着色器 (UAV) 的无序访问视图数限制为 8 个&#xff0c; (像素着色器) RTV) UAV (8 个组合 (呈现目标视图。 在 DirectX 11.1 中&#xff0c;可绑定的数量已增加。 对于 DirectCompute&a…...

机械臂速成小指南(二十五):机械臂与人工智能的有机结合

&#x1f468;‍&#x1f3eb;&#x1f970;&#x1f973;需要机械臂相关资源的同学可以在我的主页中寻找哦&#x1f916;&#x1f63d;&#x1f984; ​ ​指南目录&#x1f4d6;&#xff1a; &#x1f389;&#x1f389;机械臂速成小指南&#xff08;零点五&#xff09;&…...

浅析MySQL事务锁

在 MySQL 中,事务锁是用于确保数据一致性和并发控制的重要机制。事务锁可以帮助防止多个事务同时修改同一数据,从而避免数据不一致和脏读、不可重复读、幻读等问题。 以下是 MySQL 事务锁的关键点总结: 事务锁:用于确保数据一致性和并发控制。锁的类型: 行级锁:InnoDB,粒…...

Git学习之路(Updating)

常用命令 pwd &#xff1a;显示当前目录 git init: 在当前目录下创建一个新的仓库&#xff08;空的&#xff09; git add name.type&#xff1a;将文件添加到仓库 git commit -m "xx备注xx" &#xff1a;把文件提交到仓库。git commit一次可以提交很多文件。 git …...