pythonOpenCV篇:0基础带你python入门之常用函数
① 二值化函数
- 功能:将图像转换为二值图像(黑白图像),将像素值分为两种类别:前景(白)和背景(黑)。
- 函数:
cv2.threshold()
- 参数:
src
:输入图像(通常为灰度图像)。thresh
:阈值值,用于将像素分割为前景和背景。maxval
:满足条件的像素值赋值为此值(通常为255)。type
:阈值类型,例如:cv2.THRESH_BINARY
:大于阈值的像素赋值为maxval
,否则为0。cv2.THRESH_BINARY_INV
:反向二值化。cv2.THRESH_TRUNC
:大于阈值的像素赋值为阈值,其余保持不变。cv2.THRESH_TOZERO
:小于阈值的像素赋值为0。cv2.THRESH_TOZERO_INV
:大于阈值的像素赋值为0。
- 返回值:
retval
:实际使用的阈值(当选择 Otsu 或自适应阈值时有意义)。dst
:二值化后的图像。
- 应用:目标检测、边缘检测、文档处理等。
- 代码:
import cv2# 读取图像文件 img = cv2.imread("./lena.png") # 从当前目录读取名为 "lena.png" 的图像文件 cv2.imshow("flower", img) # 显示原始图像,窗口标题为 "flower"# 将彩色图像转换为灰度图像 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用 OpenCV 的颜色转换函数,将图像从 BGR 转为灰度 cv2.imshow("gray", img_gray) # 显示灰度图像,窗口标题为 "gray"# 设置二值化的阈值 thresh = 120 # 阈值设为 120,低于该值的像素归为 0,高于该值的像素归为 255# 手动实现基于阈值的二值化 img_binary = img_gray # 将灰度图赋值给新的变量 img_binary for i in range(img_gray.shape[0]): # 遍历图像的每一行for j in range(img_gray.shape[1]): # 遍历图像的每一列if img_binary[i][j] <= thresh: # 如果像素值小于等于阈值pass # 此处原本应该将像素值设为 0,但被注释掉了(什么都不做)# img_binary[i][j] = 0 # 手动将像素值设置为 0else: # 如果像素值大于阈值img_binary[i][j] = 255 # 手动将像素值设置为 255(白色)# 使用 OpenCV 自带的阈值函数实现二值化(此部分代码被注释掉) # ret, img_binary = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 说明: # ret:实际使用的阈值(当使用 Otsu 方法时,自动计算得到)。 # img_binary:二值化后的图像。 # cv2.THRESH_BINARY:普通二值化,像素值高于阈值设为最大值(255),否则为 0。 # cv2.THRESH_OTSU:自动计算全局最佳阈值。# 显示二值化后的图像 cv2.imshow("threshold ", img_binary) # 显示手动二值化后的图像,窗口标题为 "threshold"# 等待用户按键,随后关闭窗口 cv2.waitKey(0) # 等待用户按下任意键,不限制时间
② 自适应二值化函数
- 功能:对光照不均匀的图像进行二值化,使用局部区域的统计信息来计算阈值。
- 函数:
cv2.adaptiveThreshold()
- 参数:
src
:输入图像(必须是灰度图)。maxValue
:满足条件的像素值赋值为此值(通常为255)。adaptiveMethod
:自适应阈值计算方法:cv2.ADAPTIVE_THRESH_MEAN_C
:取邻域均值作为阈值。cv2.ADAPTIVE_THRESH_GAUSSIAN_C
:取邻域高斯加权均值作为阈值。
thresholdType
:阈值类型(通常为cv2.THRESH_BINARY
或cv2.THRESH_BINARY_INV
)。blockSize
:邻域大小(必须为奇数)。C
:常量,用于调整阈值结果。
- 返回值:
dst
:自适应二值化后的图像。
- 应用:场景文字检测、身份证/票据识别、医学影像处理。
- 代码:
import cv2 # 导入 OpenCV 库,用于图像处理# 读取图像 image = cv2.imread("./lena.png") # 从当前目录读取名为 "lena.png" 的图像文件(彩色图像) # cv2.imshow("flower", image) # 如果需要显示原图,可以取消注释此行,窗口标题为 "flower"# 将彩色图像转换为灰度图像 img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用 OpenCV 的颜色转换函数,将 BGR 彩色图像转为灰度图像 cv2.imshow("gray", img_gray) # 显示灰度图像,窗口标题为 "gray"# 使用 Otsu 方法进行全局阈值化 ret, img_binary = cv2.threshold(img_gray, # 输入图像,必须是灰度图像200, # 手动设置的初始阈值(Otsu 会自动调整,此值会被忽略)255, # 满足条件的像素值设置为 255cv2.THRESH_BINARY + cv2.THRESH_OTSU # 二值化模式为 Otsu 和普通二值化的组合 ) # cv2.imshow("threshold", img_binary) # 如果需要显示 Otsu 二值化结果,可以取消注释此行,窗口标题为 "threshold"# 使用自适应二值化方法 image_np_adaptive = cv2.adaptiveThreshold(img_gray, # 输入图像,必须是灰度图像255, # 满足条件的像素值设置为 255cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 使用高斯加权的邻域均值来计算局部阈值cv2.THRESH_BINARY, # 二值化模式为普通二值化7, # 邻域大小(blockSize),必须为奇数,例如 7 表示 7×7 的窗口5 # 常量 C,最终阈值为计算出的局部阈值减去 C ) cv2.imshow("image_np_adaptive", image_np_adaptive) # 显示自适应二值化后的图像,窗口标题为 "image_np_adaptive"# 等待用户按键,随后关闭所有窗口 cv2.waitKey(0) # 等待用户按下任意键,不限制时间
③ 腐蚀函数
- 功能:减少图像中的白色区域(前景),去除小的噪声点或断开小的连接。
- 函数:
cv2.erode()
- 参数:
src
:输入图像(二值图像或灰度图像)。kernel
:结构元素(形状和大小由cv2.getStructuringElement()
定义)。iterations
:腐蚀操作的次数。
- 返回值:
dst
:腐蚀后的图像。
- 应用:去除噪声、边缘提取、分离连通物体等。
- 代码:
import cv2 # 导入 OpenCV 库,用于图像处理# 读取图像 image_binary = cv2.imread("./morph.png") # 从当前目录读取名为 "morph.png" 的图像文件 # 注意:这里假设图像是二值图像(黑白图像),如果图像是彩色或灰度图,需要先进行预处理。# 创建结构元素(内核) image_1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, # 内核形状为椭圆(10, 10) # 内核大小为 10×10 像素 ) # 说明: # `cv2.getStructuringElement()` 用于创建形态学操作的结构元素(内核)。 # 参数 `cv2.MORPH_ELLIPSE` 表示使用椭圆形内核。其他可选形状包括: # - `cv2.MORPH_RECT`:矩形 # - `cv2.MORPH_CROSS`:交叉形 # 内核的大小对形态学操作的结果影响很大,较大的内核会产生更显著的效果。# 使用腐蚀操作处理图像 image_erode = cv2.erode(image_binary, # 输入图像,通常为二值图像image_1 # 结构元素(内核) ) # 说明: # `cv2.erode()` 是 OpenCV 的腐蚀函数,用于减少图像中前景(白色区域)的面积。 # 通过结构元素内核,腐蚀操作会移除边缘上的白色像素。 # 对于 10×10 的椭圆内核,腐蚀操作会缩小前景区域,并去除小的噪声。# 显示腐蚀后的图像 cv2.imshow("image_erode", image_erode) # 显示腐蚀后的图像,窗口标题为 "image_erode"# 显示原始图像 cv2.imshow("image_binary", image_binary) # 显示原始图像,窗口标题为 "image_binary"# 等待用户按键后关闭窗口 cv2.waitKey(0) # 等待用户按下任意键
④ 膨胀函数
- 功能:增加图像中的白色区域(前景),填补断裂的区域或小孔。
- 函数:
cv2.dilate()
- 参数:
src
:输入图像(二值图像或灰度图像)。kernel
:结构元素。iterations
:膨胀操作的次数。
- 返回值:
dst
:膨胀后的图像。
- 应用:增强物体区域、填充空隙、形态学处理等。
- 代码:
import cv2 # 导入 OpenCV 库,用于图像处理# 读取图像 image_binary = cv2.imread("./lena.png") # 从当前目录读取名为 "lena.png" 的图像文件(彩色图像)# 将彩色图像转换为灰度图像 image_gray = cv2.cvtColor(image_binary, cv2.COLOR_BGR2GRAY) # 使用 OpenCV 的颜色转换函数,将 BGR 图像转为灰度图像# 自适应二值化 image_np_adaptive = cv2.adaptiveThreshold(image_gray, # 输入灰度图像255, # 满足条件的像素值设置为 255cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 使用高斯加权的邻域均值计算局部阈值cv2.THRESH_BINARY, # 二值化模式为普通二值化7, # 邻域大小(blockSize),必须是奇数,这里为 7×7 的窗口5 # 常量 C,用于调整阈值(阈值 = 局部均值 - C) ) # 自适应二值化适用于光照不均匀的图像处理。参数 `blockSize` 和 `C` 会直接影响二值化结果。# 创建形态学操作的结构元素(内核) kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, # 内核形状为椭圆形(4, 4) # 内核大小为 4×4 像素 ) # 注意:较小的内核会对图像做出细微的形态学改变,较大的内核会显著改变图像形状。# 腐蚀操作 image_erode = cv2.erode(image_np_adaptive, # 输入二值图像(经过自适应二值化的图像)kernal # 使用的内核 ) # `cv2.erode()` 会减少前景(白色区域)的面积,移除边缘上的噪声点或小的白色区域。 # 腐蚀操作通常用于消除小噪声或分离相连的物体。# 膨胀操作 image_erode_dilate = cv2.dilate(image_erode, # 输入图像(已经腐蚀过的图像)kernal # 使用的内核 ) # `cv2.dilate()` 会增加前景(白色区域)的面积,填充空洞或连接断裂的部分。 # 腐蚀和膨胀结合使用可以实现开运算(消除小噪声)或闭运算(填补小空洞)。# 显示腐蚀后的图像 cv2.imshow("image_erode", image_erode) # 显示腐蚀处理后的图像,窗口标题为 "image_erode"# 显示原始彩色图像 cv2.imshow("image_binary", image_binary) # 显示原始图像,窗口标题为 "image_binary"# 显示腐蚀后再膨胀的图像 cv2.imshow("image_erode_dilate", image_erode_dilate) # 显示膨胀处理后的图像,窗口标题为 "image_erode_dilate"# 等待用户按键后关闭窗口 cv2.waitKey(0) # 等待用户按下任意键,窗口保持打开
⑤ 仿射变换函数
- 功能:对图像进行线性变换,如旋转、缩放、平移等。
- 函数:
cv2.warpAffine()
- 参数:
src
:输入图像。M
:2x3 的仿射变换矩阵(通过cv2.getAffineTransform()
生成)。dsize
:输出图像的尺寸(宽度和高度)。flags
:插值方法(如cv2.INTER_LINEAR
)。borderMode
和borderValue
:用于处理边界像素。
- 返回值:
dst
:变换后的图像。
- 应用:图像旋转、缩放、平移、视角调整等。
- 代码:
import numpy as np # 导入 NumPy,用于数值计算(此处未使用,但是常见的图像处理工具库) import cv2 # 导入 OpenCV 库,用于图像处理# 读取图像 image_binary = cv2.imread("./lena.png") # 从当前目录读取名为 "lena.png" 的图像文件(彩色图像)# 将彩色图像转换为灰度图像 image_gray = cv2.cvtColor(image_binary, cv2.COLOR_BGR2GRAY) # 使用 OpenCV 的颜色转换函数,将 BGR 图像转为灰度图像# 自适应二值化 image_np_adaptive = cv2.adaptiveThreshold(image_gray, # 输入灰度图像255, # 满足条件的像素值设置为 255cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 使用高斯加权的邻域均值计算局部阈值cv2.THRESH_BINARY, # 二值化模式为普通二值化7, # 邻域大小(blockSize),必须是奇数,这里为 7×7 的窗口5 # 常量 C,用于调整阈值(阈值 = 局部均值 - C) ) # 自适应二值化适用于光照不均匀的图像处理。参数 `blockSize` 和 `C` 会直接影响二值化结果。# 创建形态学操作的结构元素(内核) kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, # 内核形状为椭圆形(4, 4) # 内核大小为 4×4 像素 ) # 注意:较小的内核会对图像做出细微的形态学改变,较大的内核会显著改变图像形状。# 腐蚀操作 image_erode = cv2.erode(image_np_adaptive, # 输入二值图像(经过自适应二值化的图像)kernal # 使用的内核 ) # `cv2.erode()` 会减少前景(白色区域)的面积,移除边缘上的噪声点或小的白色区域。 # 腐蚀操作通常用于消除小噪声或分离相连的物体。# 膨胀操作 image_erode_dilate = cv2.dilate(image_erode, # 输入图像(已经腐蚀过的图像)kernal # 使用的内核 ) # `cv2.dilate()` 会增加前景(白色区域)的面积,填充空洞或连接断裂的部分。 # 腐蚀和膨胀结合使用可以实现开运算(消除小噪声)或闭运算(填补小空洞)。# 显示腐蚀后的图像 cv2.imshow("image_erode", image_erode) # 显示腐蚀处理后的图像,窗口标题为 "image_erode"# 显示原始彩色图像 cv2.imshow("image_binary", image_binary) # 显示原始图像,窗口标题为 "image_binary"# 显示腐蚀后再膨胀的图像 cv2.imshow("image_erode_dilate", image_erode_dilate) # 显示膨胀处理后的图像,窗口标题为 "image_erode_dilate"# 等待用户按键后关闭窗口 cv2.waitKey(0) # 等待用户按下任意键,窗口保持打开
⑥ 透视变换函数
- 功能:对图像进行透视变换,从一个视角映射到另一个视角,校正倾斜图像或提取局部内容。
- 函数:
cv2.warpPerspective()
- 参数:
src
:输入图像。M
:3x3 的透视变换矩阵(通过cv2.getPerspectiveTransform()
生成)。dsize
:输出图像的尺寸。flags
、borderMode
和borderValue
:与仿射变换类似。
- 返回值:
dst
:透视变换后的图像。
- 应用:文档矫正、车牌识别、场景理解等。
- 代码:
import cv2 # 导入 OpenCV 库,用于图像处理 import numpy as np # 导入 NumPy 库,用于数组操作# 读取图像 image = cv2.imread("./card.png") # 从当前目录中读取名为 "card.png" 的图像文件# 检查图像是否成功加载 if image is None: # 如果图像加载失败print("Error: Image not found. Please check the file path.") # 输出错误信息exit() # 终止程序# 定义原图中的四个点和目标点 point1 = np.array([[200, 100], [700, 150], [140, 400], [650, 460]], dtype=np.float32) # 说明: # `point1` 是原始图像中感兴趣区域(ROI)的四个顶点,表示需要校正的区域。 # 每个点用 (x, y) 坐标表示。 # 例如,(200, 100) 表示原图中左上角的一个点。point2 = np.array([[0, 0], [image.shape[1], 0], [0, image.shape[0]], [image.shape[1], image.shape[0]]], dtype=np.float32) # 说明: # `point2` 是透视变换后图像的目标点,定义了变换后的矩形区域。 # (0, 0) 是左上角,(image.shape[1], 0) 是右上角,依次类推。 # `image.shape[1]` 表示图像宽度,`image.shape[0]` 表示图像高度。# 获取透视变换矩阵 M = cv2.getPerspectiveTransform(point1, point2) # 说明: # `cv2.getPerspectiveTransform()` 函数计算透视变换矩阵。 # 参数: # - `point1`:原始图像中的四个点。 # - `point2`:目标图像中的四个点。 # 返回值: # - `M` 是一个 3x3 的透视变换矩阵。# 进行透视变换 image_s = cv2.warpPerspective(image, M, (image.shape[1], image.shape[0])) # 说明: # `cv2.warpPerspective()` 函数对图像应用透视变换。 # 参数: # - `image`:输入图像。 # - `M`:透视变换矩阵。 # - `(image.shape[1], image.shape[0])`:输出图像的大小(宽度、高度)。 # 返回值: # - `image_s` 是经过透视变换后的图像。# 显示原图和矫正后的图像 cv2.imshow("Original Image", image) # 显示窗口标题为 "Original Image" 的原始图像 cv2.imshow("Corrected Image", image_s) # 显示窗口标题为 "Corrected Image" 的矫正后图像# 等待按键关闭窗口 cv2.waitKey(0) # 等待用户按下任意键后关闭所有窗口 cv2.destroyAllWindows() # 销毁所有窗口
相关文章:
pythonOpenCV篇:0基础带你python入门之常用函数
① 二值化函数 功能:将图像转换为二值图像(黑白图像),将像素值分为两种类别:前景(白)和背景(黑)。函数:cv2.threshold()参数: src:输…...
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...
【每日一题 基础题】验证回文串
LCR 018. 验证回文串 验证回文串 给定一个字符串 s ,验证 s 是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的回文串 。 验证回文串 LCR 018. 验证回文串方法一:**筛选 判断…...
【Hadoop】-- hadoop3.x default port
Hadoop 3.x 修改了一些以前常用的默认端口,完整的默认端口列表,可点击下面配置文件获取信息: core-default.xmlhdfs-default.xmlhdfs-rbf-default.xmlyarn-default.xml...

SQL Server:只有MDF文件,如何附加数据库
第一步:先新建一个同名数据库,然后停止sql服务,删除新建数据库.ldf文件。 第二步:将要附加的数据库的.mdf文件覆盖刚新建的.mdf文件,并重启sql服务。 第三步:这时数据库DATA目录下只有一个.mdf文件…...
深入理解代理模式(Proxy):静态代理、动态代理与AOP
目录 1. 代理模式简介2. 静态代理3. 动态代理 3.1 JDK动态代理3.2 CGLIB动态代理 4. 面向切面编程(AOP)5. 实战示例6. 总结与最佳实践 1. 代理模式简介 代理模式是一种结构型设计模式,它允许我们提供一个代理来控制对其他对象的访问。代理模式在不改变原始类代码…...

项目中如何选择JVM垃圾回收器?
大家好,我是锋哥。今天分享关于【项目中如何选择JVM垃圾回收器?】面试题。希望对大家有帮助; 项目中如何选择JVM垃圾回收器? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在一个项目中选择合适的 JVM 垃圾回收器 (Garbage Collector, GC…...

如何借助5G网关实现油罐车安全在线监测
油罐车是常见的特种运输车辆,用以运送各种汽油、柴油、原油等油品,运输危险系数大,而且由于油罐车需要经常行驶在城区道路,为城市各个加油站点、企业工厂运输补充所需油料,因此也是危化品运输车辆的重点监测和管控对象…...

Edge SCDN的独特优势有哪些?
强大的边缘计算能力 Edge SCDN(边缘安全加速)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为用户提供稳定快速的访问…...

在Goland中对goroutine协程断点调试
在Goland中对goroutine协程断点调试 环境: Goland 参考了 chatgpt 的回复 进行断点调试的代码 package mainimport ("fmt""sync""time" )// worker 模拟处理任务 func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 确保任务完成后…...

解密分布式锁:保障系统一致性的关键
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 目录 1. 前言 2. 为何要使用分布式锁&…...
Redis 击穿、穿透与雪崩:深度解析与应对策略
在使用 Redis 作为缓存的系统架构中,缓存击穿、穿透和雪崩是三个常见且可能对系统性能产生严重影响的问题。深入理解这些问题并掌握有效的应对策略对于构建稳定、高效的系统至关重要。 一、缓存击穿 (一)问题描述 缓存击穿是指一个热点 key…...

8086处理器的寻址方式
概念 在计算机系统中,处理器操作和处理的是数值,那么,必定涉及数值从哪里来,处理后送到哪里去,这称为寻址方式(Addressing Mode)。 简单地说,寻址方式就是如何找到要操作的数据,以及如何找到存…...

Mask实现裁剪的原理浅析
简单来说,就是Mask会设置继承了MaskableGraphic的组件的Shader属性,进行特定的模板测试 一张普通的Image,当不挂Mask组件时,其默认Shader的模板缓存属性是这样的 当挂载上Mask时,会改变 Stencil ID变成了1ÿ…...

每隔一秒单片机向电脑发送一个16进制递增数据
SCON0x50 SM00 SM11(工作方式为方式一) REN1允许单片机从电脑接收数据 TB8 RB8 SM2是方式2和方式3直接配置为0 TI为发送中断请求标志位 由硬件配置为1 必须由 软件复位为0,RI为接收中断请求标志位,同理TI UART.c #include &l…...

逆向攻防世界CTF系列56-easy_Maze
逆向攻防世界CTF系列56-easy_Maze 64位无壳,看题目就知道是迷宫问题了 int __fastcall main(int argc, const char **argv, const char **envp){__int64 v3; // raxint v5[7][7]; // [rsp0h] [rbp-270h] BYREFint v6[104]; // [rspD0h] [rbp-1A0h] BYREFv6[52] 1…...

【Linux网络编程】应用层:HTTP协议 | URL | 简单实现一个HTTP服务器 | 永久重定向与临时重定向
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系…...

电压调整电路汇总
目录: 一、LDO 1、LM1117 2、NCV33275 3、TLE42764 4、TPS7B67xx-Q1 5、总结 二、DCDC转换器 1、LM2576与LM2596 2、MC34063 一、LDO 1、LM1117 LM1117 是一款在 800mA 负载电流下具有 1.2V 压降的低压降稳压器。 LM1117 提供可调节电压版本,…...

day28 文件IO及进程线程基础
讨论光标共享情况 1.dup和dup2定义变量赋值都共享光标 2.使用两个描述符调用两次open函数打开同一个文件,不共享光标 #include <myhead.h>int main(int argc, const char *argv[]) {//1、描述符赋值给新的变量char buff[1024] "abcdefg";int ne…...

【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 前言 随着无服务计算的兴起和大数据环境中的数据集成需求, 需要使用某些轻量级的服务,来实现一些简单操作。因此Azure Function就成了微软云上的一个必不可少的组成部分。 …...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...