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

第十三节:图像形态学操作-腐蚀与膨胀

引言

图像形态学是数字图像处理领域中的一个重要分支,它主要研究图像中物体的形状和结构。作为形态学操作的基础,腐蚀(Erosion)膨胀(Dilation)是两种最核心的操作,广泛应用于图像预处理、特征提取、目标检测等多个领域。OpenCV作为最流行的计算机视觉库之一,提供了高效实现这些操作的函数。本文将深入探讨腐蚀与膨胀的原理、实现方法以及实际应用场景,帮助读者全面理解这两种基础但强大的图像处理技术。

一、形态学操作基础概念

1.1 什么是形态学操作

形态学操作是一组基于形状处理图像的操作,它通过结构元素(也称为核)与图像进行特定形式的相互作用来实现。这些操作特别适用于二值图像(黑白图像),但也可以扩展到灰度图像。

形态学操作的核心思想是利用结构元素探测图像的结构特征。结构元素本质上是一个小矩阵,通常比处理的图像小得多,它定义了操作的邻域大小和形状。常见的结构元素形状包括矩形、椭圆形和十字形。

 

1.2 结构元素的重要性

结构元素在形态学操作中扮演着关键角色,它决定了操作的效果和特性:

  • 大小:决定了操作的"力度"或影响范围

  • 形状:影响操作的方向性和各向同性

  • 锚点:通常位于中心,决定了操作的参考点

在OpenCV中,结构元素可以通过cv2.getStructuringElement()函数创建:

import cv2
import numpy as np# 创建矩形结构元素
kernel_rect = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# 创建椭圆形结构元素
kernel_ellipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
# 创建十字形结构元素
kernel_cross = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5))

1.3 形态学操作分类

基本的形态学操作包括:

  1. 腐蚀(Erosion)

  2. 膨胀(Dilation)

  3. 开运算(Opening) - 先腐蚀后膨胀

  4. 闭运算(Closing) - 先膨胀后腐蚀

此外还有基于这些基本操作的变体,如形态学梯度、顶帽变换、黑帽变换等。本文将重点讨论最基础的腐蚀和膨胀操作。

二、腐蚀操作(Erosion)详解

2.1 腐蚀的数学定义

腐蚀是形态学中最基本的操作之一。对于二值图像,腐蚀可以定义为:

A ⊖ B = {z | (B)ₐ ⊆ A}

其中:

  • A是输入图像

  • B是结构元素

  • z表示像素位置

  • (B)ₐ表示结构元素B平移a后的集合

简单来说,腐蚀操作检查结构元素覆盖的邻域是否完全属于前景(白色)区域。如果是,则中心像素保持前景;否则变为背景(黑色)。

 

2.2 腐蚀的直观理解

想象用一把"腐蚀刷子"(结构元素)在图像上滑动。只有当刷子完全覆盖前景区域时,中心点才会保留为前景;否则就会被"腐蚀"掉。

腐蚀的效果包括:

  • 消除小的孤立点(噪声)

  • 缩小物体尺寸

  • 断开狭窄的连接部分

  • 平滑物体边界

2.3 OpenCV中的腐蚀实现

在OpenCV中,腐蚀操作通过cv2.erode()函数实现:

eroded = cv2.erode(src, kernel, iterations=1)

 参数说明:

  • src: 输入图像,通常是二值图像

  • kernel: 结构元素

  • iterations: 腐蚀操作的执行次数

示例代码:

import cv2
import numpy as np# 读取图像并转为灰度
image = cv2.imread('example.png', 0)
# 二值化
_, binary = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 创建3x3矩形结构元素
kernel = np.ones((3,3), np.uint8)# 腐蚀操作
eroded = cv2.erode(binary, kernel, iterations=1)# 显示结果
cv2.imshow('Original', binary)
cv2.imshow('Eroded', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 腐蚀的实际应用

  1. 去除小噪声点:腐蚀可以消除图像中孤立的白色噪声点

  2. 分离粘连物体:当物体轻微粘连时,腐蚀可以帮助分离

  3. 边缘细化:多次腐蚀可以使粗边缘变细

  4. 背景提取:通过腐蚀前景可以近似获取背景

2.5 腐蚀效果的影响因素

  1. 结构元素大小:较大的核会导致更强烈的腐蚀效果

  2. 结构元素形状

    • 矩形核:各向同性腐蚀

    • 十字形核:主要腐蚀水平和垂直方向

    • 椭圆形核:各向异性腐蚀

  3. 迭代次数:多次迭代相当于使用更大的核

 

三、膨胀操作(Dilation)详解

3.1 膨胀的数学定义

膨胀是腐蚀的对偶操作,其数学定义为:

A ⊕ B = {z | (B̂)ₐ ∩ A ≠ ∅}

其中:

  • A是输入图像

  • B是结构元素

  • B̂表示B的反射(对于对称结构元素,B̂=B)

  • z表示像素位置

简单来说,只要结构元素与前景区域有重叠,中心像素就会被设为前景。

3.2 膨胀的直观理解

想象用膨胀刷子在图像上滑动。只要刷子碰到任何前景像素,中心点就会被"膨胀"为前景。

膨胀的效果包括:

  • 填充小的孔洞和裂缝

  • 扩大物体尺寸

  • 连接邻近的物体

  • 平滑物体边界

3.3 OpenCV中的膨胀实现

在OpenCV中,膨胀操作通过cv2.dilate()函数实现:

dilated = cv2.dilate(src, kernel, iterations=1)

参数与腐蚀函数类似:

示例代码:

import cv2
import numpy as np# 读取图像并转为灰度
image = cv2.imread('example.png', 0)
# 二值化
_, binary = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 创建3x3矩形结构元素
kernel = np.ones((3,3), np.uint8)# 膨胀操作
dilated = cv2.dilate(binary, kernel, iterations=1)# 显示结果
cv2.imshow('Original', binary)
cv2.imshow('Dilated', dilated)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.4 膨胀的实际应用

  1. 填充孔洞:膨胀可以填充前景区域中的小孔洞

  2. 连接断裂部分:可以修复断裂的文字或边缘

  3. 边缘加粗:多次膨胀可以使细边缘变粗

  4. 目标扩大:当需要强调某些区域时可以使用膨胀

3.5 膨胀效果的影响因素

与腐蚀类似,膨胀效果受以下因素影响:

  1. 结构元素大小:较大的核导致更强烈的膨胀

  2. 结构元素形状:影响膨胀的方向性

  3. 迭代次数:多次迭代相当于更大的核

 

四、腐蚀与膨胀的对比与结合

4.1 腐蚀与膨胀的对偶性

腐蚀和膨胀是一对互逆操作,满足以下对偶关系:

(A ⊖ B)� = Aᶜ ⊕ B̂
(A ⊕ B)ᶜ = Aᶜ ⊖ B̂

其中Aᶜ表示A的补集,B̂表示B的反射。

4.2 开运算与闭运算

通过组合腐蚀和膨胀,可以形成更有用的操作:

  1. 开运算(Opening):先腐蚀后膨胀

    • 公式:A ∘ B = (A ⊖ B) ⊕ B

    • 效果:消除小物体,平滑大物体边界,不改变其面积

  2. 闭运算(Closing):先膨胀后腐蚀

    • 公式:A • B = (A ⊕ B) ⊖ B

    • 效果:填充小孔洞,连接邻近物体,平滑边界

在OpenCV中,可以使用cv2.morphologyEx()函数实现这些操作: 

# 开运算
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 闭运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

4.3 形态学梯度

形态学梯度是膨胀与腐蚀的差值,可以用于边缘检测:

梯度 = (A ⊕ B) - (A ⊖ B)

在OpenCV中的实现:

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

五、实际应用案例

5.1 车牌识别中的字符分割

在车牌识别系统中,腐蚀和膨胀可用于处理字符分割:

# 车牌字符分割示例
plate = cv2.imread('plate.jpg', 0)
_, binary = cv2.threshold(plate, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# 使用水平方向的结构元素进行膨胀,连接字符笔画
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1))
dilated = cv2.dilate(binary, horizontal_kernel, iterations=2)# 查找轮廓
contours, _ = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 处理每个字符区域
for cnt in contours:x,y,w,h = cv2.boundingRect(cnt)char = binary[y:y+h, x:x+w]# 进一步处理单个字符...

5.2 医学图像处理

在细胞图像分析中,形态学操作可用于分离粘连的细胞:

# 细胞分割示例
cell = cv2.imread('cells.jpg', 0)
_, binary = cv2.threshold(cell, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# 腐蚀分离粘连细胞
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
eroded = cv2.erode(binary, kernel, iterations=2)# 膨胀恢复细胞大小
dilated = cv2.dilate(eroded, kernel, iterations=2)# 查找轮廓
contours, _ = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"检测到{len(contours)}个细胞")

5.3 文档图像处理

去除文档图像中的噪声和干扰线:

# 文档去噪示例
doc = cv2.imread('document.jpg', 0)
_, binary = cv2.threshold(doc, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# 开运算去除小噪声
kernel_small = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opened = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel_small)# 闭运算填充字符内部空隙
kernel_medium = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel_medium)# 去除水平线
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))
detected_lines = cv2.morphologyEx(closed, cv2.MORPH_OPEN, horizontal_kernel)
result = cv2.subtract(closed, detected_lines)

六、高级技巧与优化

6.1 非矩形结构元素的应用

根据不同的应用场景,选择合适形状的结构元素:

# 不同形状结构元素的比较
image = cv2.imread('text.png', 0)
_, binary = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY_INV)# 矩形核
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
# 椭圆核
ellipse_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
# 十字核
cross_kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))eroded_rect = cv2.erode(binary, rect_kernel)
eroded_ellipse = cv2.erode(binary, ellipse_kernel)
eroded_cross = cv2.erode(binary, cross_kernel)

6.2 自适应形态学操作

根据局部图像特性调整操作参数:

# 自适应阈值与形态学结合
adaptive = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV, 11, 2)# 根据区域大小动态选择核大小
contours, _ = cv2.findContours(adaptive, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:area = cv2.contourArea(cnt)if area < 100:  # 小区域使用小核kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))else:           # 大区域使用大核kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))x,y,w,h = cv2.boundingRect(cnt)roi = adaptive[y:y+h, x:x+w]processed = cv2.morphologyEx(roi, cv2.MORPH_CLOSE, kernel)adaptive[y:y+h, x:x+w] = processed

6.3 形态学操作性能优化

对于大图像或实时处理,可以考虑以下优化策略:

  1. 适当减小迭代次数:有时减少迭代次数并使用稍大的核可以达到类似效果

  2. 图像金字塔:先在低分辨率图像上处理,再上采样

  3. 并行处理:利用OpenCV的并行框架或GPU加速

  4. ROI处理:只对感兴趣区域进行形态学操作

# 使用ROI进行局部处理
roi = image[y1:y2, x1:x2]
processed_roi = cv2.erode(roi, kernel)
image[y1:y2, x1:x2] = processed_roi

七、总结

腐蚀和膨胀作为最基本的形态学操作,虽然概念简单,但在实际图像处理中发挥着重要作用。通过本文的详细讲解,我们了解到:

  1. 腐蚀用于消除小物体、分离粘连目标和细化边界

  2. 膨胀用于填充孔洞、连接断裂部分和扩大目标

  3. 结构元素的大小和形状显著影响操作效果

  4. 腐蚀和膨胀可以组合形成更复杂的形态学操作

  5. 这些操作在车牌识别、医学图像分析、文档处理等领域有广泛应用

相关文章:

第十三节:图像形态学操作-腐蚀与膨胀

引言 图像形态学是数字图像处理领域中的一个重要分支&#xff0c;它主要研究图像中物体的形状和结构。作为形态学操作的基础&#xff0c;腐蚀(Erosion)和膨胀(Dilation)是两种最核心的操作&#xff0c;广泛应用于图像预处理、特征提取、目标检测等多个领域。OpenCV作为最流行的…...

数据结构 - 9( 位图 布隆过滤器 并查集 LRUCache 6000 字详解 )

一&#xff1a;位图 位图是一种高效的数据结构&#xff0c;它通过比特来表示某个值的存在与否&#xff0c;通常以连续的二进制位数组存储。每个比特位对应一个特定的状态&#xff0c;这种表示方式在内存效率和操作速度上具有显著优势&#xff0c;尤其适用于海量数据、整数以及…...

在Hugging Face网站像Github一样克隆repository到本地的具体步骤

首先我们找到自己想要的仓库&#xff0c;在搜索栏进行搜索 之后我们可以看到这里有三个点&#xff0c;鼠标点击&#xff0c;选择Clone repository 最后按照上面的步骤进行复制粘贴到电脑上执行就行&#xff0c;我们可以看到有两种选择HTTPS和SSH&#xff0c;如果HTTPS不行就选择…...

如何使用Java从PDF文件中提取图像(教程)

Java本身不直接支持PDF文件操作&#xff0c;因此需要使用外部Java PDF库。本教程将向您展示如何通过5个简单步骤&#xff0c;使用JPedal Java PDF库从PDF文件中提取图像。 使用Java从PDF中提取图像 • 将JPedal库添加到您的类路径或模块路径&#xff08;下载试用版jar文件&…...

通过混合机器学习和 TOPSIS 实现智能手机身份验证的稳健行为生物识别框架

1. 简介 随着日常工作、个人生活和金融操作对智能手机的依赖性不断增强,对弹性安全身份验证系统的需求也日益增长。尽管 PIN 码、密码和静态生物识别等传统身份验证方法仍可为系统提供一定的安全级别,但事实证明,它们容易受到多种威胁,包括敏感数据泄露、网络钓鱼、盗窃和…...

day010

文章目录 1. 在Ubuntu中使用visudo2. 别名 alias2.1 查看已配置的别名2.2 配置grep别名2.3 配置rm别名2.4 临时使用配置别名的命令 3. 系统校验检查3.1 md5校验3.2 aide 高级入侵检测环境3.2.1 安装aide3.2.2 修改aide配置文件3.2.3 根据配置文件生成初始的指纹信息库3.2.4 使用…...

Coco AI 开源应用程序 - 搜索、连接、协作、您的个人 AI 搜索和助手,都在一个空间中。

一、软件介绍 文末提供程序和源码下载 Coco AI 是一个统一的搜索平台&#xff0c;可将您的所有企业应用程序和数据&#xff08;Google Workspace、Dropbox、Confluent Wiki、GitHub 等&#xff09;连接到一个功能强大的搜索界面中。此存储库包含为桌面和移动设备构建的 Coco 应…...

MySQL 8.0 OCP(1Z0-908)英文题库(11-20)

目录 第11题题目分析正确答案 第12题题目分析正确答案 第13题题目分析正确答案 第14题题目分析正确答案 第15题题目分析正确答案 第16题题目分析正确答案 第17题题目分析正确答案&#xff1a; 第18题题目分析正确答案 第19题题目分析正确答案 第20题题目分析正确答案 第11题 W…...

国标GB28181软件EasyGBS雪亮工程打造智能高效的视频监控新体系

一、背景 雪亮工程是构建公共安全视频监控联网应用的系统工程&#xff0c;旨在通过整合各类视频监控资源&#xff0c;实现城乡视频监控一体化&#xff0c;提升社会治安防控能力。随着城市化进程的加快和社会治理需求的不断提高&#xff0c;雪亮工程的建设规模不断扩大&#xf…...

视频添加字幕脚本分享

脚本简介 这是一个给视频添加字幕的脚本&#xff0c;可以方便的在指定的位置给视频添加不同大小、字体、颜色的文本字幕&#xff0c;添加方式可以直接修改脚本中的文本信息&#xff0c;或者可以提前编辑好.srt字幕文件。脚本执行环境&#xff1a;windowsmingwffmpeg。本方法仅…...

springCloud/Alibaba常用中间件之GateWay网关

文章目录 SpringCloud:依赖版本补充GateWay:网关三大核心之Router:路由1、导入基础依赖2、进行服务注册3、路由映射4、测试访问GateWay的端口是否可以访问 三大核心之Predicate:断言配置文件自定义Predicate&#xff08;断言&#xff09; 三大核心之Filter:过滤配置文件自定义全…...

ABP vNext + Dapr 实现云原生微服务治理

ABP vNext Dapr 实现云原生微服务治理 &#x1f680; 前言 &#x1f4dd; 随着云原生与微服务架构的快速发展&#xff0c;相关工具和框架也在不断演进。ABP vNext 是一套成熟而现代的 .NET 应用开发框架&#xff0c;在模块化、领域驱动设计等方面提供强大支持。而 Dapr 作为…...

【报错】view size is not compatible with input tensor‘s size and stride

完整报错 Traceback (most recent call last): File "D:\360MoveData\Users\HONOR\whu\TwoStageTraining.py", line 590, in <module> criterionseg_criterion, save_dir./models, writerwriter_first_stage) File "D:\360MoveData\Users\HONOR\whu\TwoS…...

maven如何搭建自己的私服(windows版)?

环境准备 安装 JDK &#xff1a;确保系统已安装 JDK 8 或更高版本。可以通过以下步骤安装 JDK&#xff1a; 下载 JDK 安装包&#xff0c;可以从Oracle 官方网站下载适用于 Windows 的 JDK 安装程序。 运行安装程序&#xff0c;按照提示完成安装。安装过程中可以指定安装路径&a…...

CDGP|数据全生命周期的“收数、治数、用数、保数”体系详解

在数据成为重要资产的今天&#xff0c;如何高效地管理和利用数据已成为企业和组织的核心竞争力之一。数据全生命周期管理涵盖了从数据收集、治理、应用到保护的各个环节&#xff0c;形成了一个闭环体系。本文将重点介绍数据全生命周期中的“收数、治数、用数、保数”四个关键环…...

在UI原型设计中,低、高保真原型图有什么区别?

在数字产品开发中&#xff0c;原型&#xff08;Prototype&#xff09; 是连接创意与落地的桥梁。它通过可视化的方式验证功能、交互与用户体验&#xff0c;避免开发资源浪费。而低保真&#xff08;Lo-Fi&#xff09;与高保真&#xff08;Hi-Fi&#xff09;原型&#xff0c;则是…...

万物互联时代:ONVIF协议如何重构安防监控系统架构

前言 一、ONVIF协议是什么 ONVIF&#xff08;Open Network Video Interface Forum&#xff0c;开放式网络视频接口论坛&#xff09;是一种全球性的开放行业标准&#xff0c;由安讯士&#xff08;AXIS&#xff09;、博世&#xff08;BOSCH&#xff09;和索尼&#xff08;SONY&…...

初识Linux · 传输层协议TCP · 上

目录 前言&#xff1a; TCP结构体 首部长度 确认应答机制 捎带应答机制 超时重传机制 连接管理机制 三次握手 SYN_SENT SYN_RCVD ESTABLISHED TCP为什么是三次握手 四次挥手 什么是四次挥手 状态理解 CLOSE_WAIT LAST_ACK TIME_WAIT 前言&#xff1a; 前文有…...

基于SpringBoot的校园周边美食探索及分享平台的设计与实现

资源详情&#xff1a; 私信我或点击链接获取&#xff1a; 基于SpringBoot的校园周边美食探索及分享平台的设计与实现资源-CSDN文库 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联…...

系统架构设计-真题2024下半年总结

系统架构设计-真题2024下半年总结 综合知识&#xff08;选择题&#xff09;考点分布选择题详细解释ABSD方法简介 选项分析生活化例子概念讲解系统的质量目标系统的商业目标系统开发人员的商业目标 简单记法总结基于内容推荐的优点选项分析正确答案总结 综合知识&#xff08;选择…...

《React Native性能优化:从卡顿到丝滑的蜕变之旅》

《React Native性能优化:从卡顿到丝滑的蜕变之旅》 前言:当你的React Native应用开始"便秘"… “这破应用怎么又卡了?!”——如果你也曾在测试自己的React Native应用时发出这样的呐喊,那么你不是一个人在怒吼。想象一下这样的场景:你精心打造的APP在低端安卓…...

flutter build apk出现的一些奇怪的编译错误

我换了新电脑后重新编译基于livekit 的 flutter livekit工程&#xff0c;然后编译的时候一直报flutter_webrtc的 0.11.7 版本的dart代码有一个接口未实现&#xff0c;我比较了所以环境和版本实现找不到问题&#xff0c;根本不正常哪里导致的问题 &#xff0c;以前的电脑的环境一…...

枚举 · 例8扩展-校门外的树:hard

登录—专业IT笔试面试备考平台_牛客网 代码区&#xff1a; #include<algorithm> #include<iostream> #include<vector>using namespace std; struct TREE{int left,right; }; bool compare(const TREE&a,const TREE& b ){if(a.left!b.left){return…...

监控系统进阶方案:OpenObserve的Docker部署与远程访问配置指南

文章目录 前言1. 安装Docker2. 创建并启动OpenObserve容器3. 本地访问测试4. 公网访问本地部署的OpenObserve4.1 内网穿透工具安装4.2 创建公网地址 5. 配置固定公网地址 前言 今天&#xff0c;我想分享一个在云原生可观测性领域备受关注的开源项目——OpenObserve。在复杂的云…...

如何通过grep 排除“INTEGER: 1”

在 Linux/Unix 系统中&#xff0c;使用 grep 过滤数据并 取反&#xff08;排除匹配内容&#xff09; 的核心选项是 -v&#xff08;反向匹配&#xff09;。以下是具体用法和场景示例&#xff1a; 1. 基础用法&#xff1a;排除包含指定关键词的行 # 语法 grep -v "pattern&…...

基于Qt开发的http/https客户端

成果展示&#xff1a; 使用Qt开发HTTP客户端主要依赖QNetworkAccessManager、QNetworkRequest和QNetworkReply三大核心类。以下是具体实现要点及最佳实践&#xff1a; 一、核心类与基础流程​​ 1.QNetworkAccessManager​​ 作为HTTP请求的管理者&#xff0c;负责异步处理…...

微程序控制器的详细工作过程

1. 基本组成结构 微程序控制器主要由以下部件构成&#xff1a; 控制存储器&#xff08;Control Store, CS&#xff09;&#xff1a;存储微程序&#xff08;微指令集合&#xff09;&#xff0c;通常使用ROM或EPROM。 微地址寄存器&#xff08;μAR&#xff09;&#xff1a;存放…...

PostgreSQL 的 pg_current_logfile 函数

PostgreSQL 的 pg_current_logfile 函数 pg_current_logfile() 是 PostgreSQL 9.6 版本引入的一个系统管理函数&#xff0c;用于获取当前正在使用的日志文件路径。 一 基本用法 1 函数定义 pg_current_logfile([text]) → text2 简单查询 -- 获取当前日志文件路径 SELECT …...

实时云渲染——比像素流送节省80%精力的UE程序推流技术

UE5引擎除了适合开发3A游戏&#xff0c;同样适用于开发大场景高精度的数字孪生可视化场景&#xff0c;自带的Nanite 虚拟微多边形几何体技术、Lumen 全动态全局光照技术、高度可扩展的架构、强大的地形和植被系统以及高效的流媒体技术&#xff0c;使UE5在数字孪生领域的技术占有…...

如何解决 Linux 系统文件描述符耗尽的问题

在Linux系统中&#xff0c;文件描述符&#xff08;File Descriptor, FD&#xff09;是操作系统管理打开文件、套接字、管道等资源的抽象标识。当进程或系统耗尽文件描述符时&#xff0c;会导致服务崩溃、连接失败等严重问题。以下是详细的排查和解决方案&#xff1a; --- ###…...

存储器:DDR和HBM的区别

本文简要介绍DDR&#xff08;Double Data Rate SDRAM&#xff09;和HBM&#xff08;High Bandwidth Memory&#xff09;的主要区别&#xff1a; 1. 架构与设计 DDR&#xff1a;传统的主流动态随机存取存储器&#xff08;DRAM&#xff09;&#xff0c;采用并行总线架构&#x…...

【计算机网络】Cookie、Session、Token之间有什么区别?

大家在日常使用浏览器时可能会遇到&#xff1a;是否清理Cookie&#xff1f;这个问题。 那么什么是Cookie呢&#xff1f;与此相关的还有Session、Token这些。这两个又是什么呢&#xff1f; 本文将对这三个进行讲解区分&#xff0c;如果对小伙伴有帮助的话&#xff0c;也请点赞、…...

每日学习:DAY24

日常开发与学习记录 前言 怎么感觉自己越来越懒了。 日程 忘记写了&#xff0c;大概是早上做了 SQL 表单&#xff0c;晚上写了 DispatcherController。 学习记录 操作系统 页面分配置换策略 学习内容 省流 SQL 表单构建关于嵌套注解的生效机制DispatcherController 统…...

grpo原理

图解deepseek的grpo原理、以debug形式阅读grpo的源码 练习两天半&#xff0c;从零实现DeepSeek-R1&#xff08;基于Qwen2.5-0.5B和规则奖励模型&#xff0c;GRPO&#xff09;&#xff0c;从原理讲解到代码实现&#xff0c;解开DeepSeek-R1的神秘面纱 第一个视频 GRPO讲解 mod…...

RabbitMQ--基础篇

RabbitMQ 简介&#xff1a;RabbitMQ 是一种开源的消息队列中间件&#xff0c;你可以把它想象成一个高效的“邮局”。它专门负责在不同应用程序之间传递消息&#xff0c;让系统各部分能松耦合地协作 优势&#xff1a; 异步处理&#xff1a;比如用户注册后&#xff0c;主程序将发…...

ResNet残差神经网络的模型结构定义(pytorch实现)

ResNet残差神经网络的模型结构定义&#xff08;pytorch实现&#xff09; ResNet‑34 ResNet‑34的实现思路。核心在于&#xff1a; 定义残差块&#xff08;BasicBlock&#xff09;用 _make_layer 方法堆叠多个残差块按照 ResNet‑34 的通道和层数配置来搭建网络 import torch…...

如何使用极狐GitLab 软件包仓库功能托管 ruby?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 Ruby gems (BASIC ALL) WARNING:Ruby gems 软件包库正在开发中&#xff0c;由于功能有限&#xff0c;尚未准备好…...

AI日报 · 2025年5月08日|Stripe发布全球首个支付AI基础模型

1、Stripe 发布支付领域专用 AI 基础模型及稳定币账户功能 Stripe 于5月7日在其年度 Sessions 大会上发布了全球首个专为支付领域打造的 AI 基础模型——“Payments Foundation Model”&#xff0c;该模型基于数百亿笔交易数据训练&#xff0c;能够捕捉每个支付中数百个传统模…...

React 笔记[1] hello world

React 笔记[1] hello world 明白了&#xff01;既然你已经安装了 Node.js&#xff0c;我们可以 从零开始搭建一个 React Tailwind CSS 的 Hello World 项目。我将一步步列出操作指令&#xff0c;你只需要在终端里依次执行。 ✅ 第一步&#xff1a;初始化项目 mkdir my-hello…...

好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端

在过去&#xff0c;PyCharm 社区版虽然提供了链接 Windows 子系统 Linux&#xff08;WSL&#xff09;终端的能力&#xff0c;但用户无法在设置中直接指定 WSL 为默认终端&#xff0c;这一功能仅限于专业版使用者。 而现在&#xff0c;在 PyCharm 2025.1.1 版本中&#xff0c;Je…...

基于redis的定时状态更新

基于redis的定时状态更新 下面是一个简单的示例&#xff0c;展示如何使用redis实现状态更新&#xff0c;从而满足在某些场景下&#xff0c;既需要频繁更新状态&#xff0c; 又需要保证状态的实时性。以及定时更新状态的需求。 示例说明 假设有一个剧目演出计划&#xff0c;确…...

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...

服务器托管的常见问题

一、何谓IDC服务器托管服务? IDC服务器托管是指为了提高网站的访问速度&#xff0c;将您的服务器及相关设备托管到具有完善机房设施、高品质网络环境、丰富带宽资源和运营经验以及可对用户的网络和设备进行实时监控的网络数据中心内&#xff0c;以此使系统达到安全、可靠、稳定…...

使用Scrapeless Scraping Browser的自动化和网页抓取最佳实践

引言&#xff1a;人工智能时代浏览器自动化和数据收集的新范式 随着生成性人工智能、人工智能代理和数据密集型应用程序的快速崛起&#xff0c;浏览器正在从传统的“用户互动工具”演变为智能系统的“数据执行引擎”。在这一新范式中&#xff0c;许多任务不再依赖单一的API端点…...

电子电气架构 --- 如何有助于提安全性并减少事故

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章&#xff1a; 【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别 https://www.dong-blog.fun/post/1661 使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct https://www.dong-blog.fun/post/1762 构建最新的LLaMA-Factory镜像 https://www.dong-blog.f…...

MYSQL的行级锁到底锁的是什么东西

MySQL 的行级锁是一种锁机制&#xff0c;它允许数据库在执行并发操作时&#xff0c;锁定表中的某一行数据而不是整张表。行级锁通过限制对特定行的访问&#xff0c;允许其他线程并发地访问表中的其他行&#xff0c;从而提高并发性和性能。 行级锁的锁定对象 行级锁锁定的是 行…...

图神经网络中的虚拟节点

1.虚拟节点 当我们使用节点来构成图结构时&#xff0c; regular node: 常规的节点即代表了某一个局部特征&#xff0c; 即局部节点特征。 virtual node&#xff1a; 普通的节点不同&#xff0c;有时会需要这样的一种特征&#xff0c; 该特征代表了该样本的全局信息&#xff0…...

关于多版本CUDA共存的研究,是否能一台机子装两个CUDA 版本并正常切换使用

我发现了一个很有意思的事 我装了11.8cuda再装12.3cuda结果我的11.8cuda还在&#xff0c;没被替换掉或者删掉 然后我打开我的环境发现它的环境除了cuda_path都没改 这样我就有个大胆的想法&#xff0c;如果我把cuda path换成11.8路径那是不是就能切换了 而且cuda_path 和 cuda_…...

el-table与echarts图形实现滚动联动

el-table与echarts图形滚动联动 效果图 实现思路 设计图滚动条位于表格下方&#xff0c;且echarts滚动不易获取当前展示数据到左侧的距离 故&#xff1a;通过监听表格的滚动实现联动 为了保持echarts的横坐标和表格的列基本保持对齐&#xff0c;用tdWidth标识单列表格的宽度…...