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

pythonOpenCV篇:0基础带你python入门之常用函数

二值化函数

  • 功能:将图像转换为二值图像(黑白图像),将像素值分为两种类别:前景(白)和背景(黑)。
  • 函数cv2.threshold()
  • 参数
    1. src:输入图像(通常为灰度图像)。
    2. thresh:阈值值,用于将像素分割为前景和背景。
    3. maxval:满足条件的像素值赋值为此值(通常为255)。
    4. type:阈值类型,例如:
      • cv2.THRESH_BINARY:大于阈值的像素赋值为maxval,否则为0。
      • cv2.THRESH_BINARY_INV:反向二值化。
      • cv2.THRESH_TRUNC:大于阈值的像素赋值为阈值,其余保持不变。
      • cv2.THRESH_TOZERO:小于阈值的像素赋值为0。
      • cv2.THRESH_TOZERO_INV:大于阈值的像素赋值为0。
  • 返回值
    1. retval:实际使用的阈值(当选择 Otsu 或自适应阈值时有意义)。
    2. 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()
  • 参数
    1. src:输入图像(必须是灰度图)。
    2. maxValue:满足条件的像素值赋值为此值(通常为255)。
    3. adaptiveMethod:自适应阈值计算方法:
      • cv2.ADAPTIVE_THRESH_MEAN_C:取邻域均值作为阈值。
      • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:取邻域高斯加权均值作为阈值。
    4. thresholdType:阈值类型(通常为 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV)。
    5. blockSize:邻域大小(必须为奇数)。
    6. 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()
  • 参数
    1. src:输入图像(二值图像或灰度图像)。
    2. kernel:结构元素(形状和大小由 cv2.getStructuringElement() 定义)。
    3. 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()
  • 参数
    1. src:输入图像(二值图像或灰度图像)。
    2. kernel:结构元素。
    3. 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()
  • 参数
    1. src:输入图像。
    2. M:2x3 的仿射变换矩阵(通过 cv2.getAffineTransform() 生成)。
    3. dsize:输出图像的尺寸(宽度和高度)。
    4. flags:插值方法(如 cv2.INTER_LINEAR)。
    5. borderModeborderValue:用于处理边界像素。
  • 返回值
    • 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()
  • 参数
    1. src:输入图像。
    2. M:3x3 的透视变换矩阵(通过 cv2.getPerspectiveTransform() 生成)。
    3. dsize:输出图像的尺寸。
    4. flagsborderModeborderValue:与仿射变换类似。
  • 返回值
    • 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入门之常用函数

① 二值化函数 功能&#xff1a;将图像转换为二值图像&#xff08;黑白图像&#xff09;&#xff0c;将像素值分为两种类别&#xff1a;前景&#xff08;白&#xff09;和背景&#xff08;黑&#xff09;。函数&#xff1a;cv2.threshold()参数&#xff1a; src&#xff1a;输…...

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固&#xff08;Windows, Linux&#xff09;A-2 Nginx安全策略&#xff08;Linux&#xff09;A-3日志监控&#xff08;Windows&#xff09;A-4中间件…...

【每日一题 基础题】验证回文串

LCR 018. 验证回文串 验证回文串 给定一个字符串 s &#xff0c;验证 s 是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 本题中&#xff0c;将空字符串定义为有效的回文串 。 验证回文串 LCR 018. 验证回文串方法一&#xff1a;**筛选 判断…...

【Hadoop】-- hadoop3.x default port

Hadoop 3.x 修改了一些以前常用的默认端口,完整的默认端口列表,可点击下面配置文件获取信息: core-default.xmlhdfs-default.xmlhdfs-rbf-default.xmlyarn-default.xml...

SQL Server:只有MDF文件,如何附加数据库

第一步&#xff1a;先新建一个同名数据库&#xff0c;然后停止sql服务&#xff0c;删除新建数据库.ldf文件。 第二步&#xff1a;将要附加的数据库的.mdf文件覆盖刚新建的.mdf文件&#xff0c;并重启sql服务。 第三步&#xff1a;这时数据库DATA目录下只有一个.mdf文件&#xf…...

深入理解代理模式(Proxy):静态代理、动态代理与AOP

目录 1. 代理模式简介2. 静态代理3. 动态代理 3.1 JDK动态代理3.2 CGLIB动态代理 4. 面向切面编程(AOP)5. 实战示例6. 总结与最佳实践 1. 代理模式简介 代理模式是一种结构型设计模式&#xff0c;它允许我们提供一个代理来控制对其他对象的访问。代理模式在不改变原始类代码…...

项目中如何选择JVM垃圾回收器?

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

如何借助5G网关实现油罐车安全在线监测

油罐车是常见的特种运输车辆&#xff0c;用以运送各种汽油、柴油、原油等油品&#xff0c;运输危险系数大&#xff0c;而且由于油罐车需要经常行驶在城区道路&#xff0c;为城市各个加油站点、企业工厂运输补充所需油料&#xff0c;因此也是危化品运输车辆的重点监测和管控对象…...

Edge SCDN的独特优势有哪些?

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

在Goland中对goroutine协程断点调试

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

解密分布式锁:保障系统一致性的关键

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 目录 1. 前言 2. 为何要使用分布式锁&…...

Redis 击穿、穿透与雪崩:深度解析与应对策略

在使用 Redis 作为缓存的系统架构中&#xff0c;缓存击穿、穿透和雪崩是三个常见且可能对系统性能产生严重影响的问题。深入理解这些问题并掌握有效的应对策略对于构建稳定、高效的系统至关重要。 一、缓存击穿 &#xff08;一&#xff09;问题描述 缓存击穿是指一个热点 key…...

8086处理器的寻址方式

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

Mask实现裁剪的原理浅析

简单来说&#xff0c;就是Mask会设置继承了MaskableGraphic的组件的Shader属性&#xff0c;进行特定的模板测试 一张普通的Image&#xff0c;当不挂Mask组件时&#xff0c;其默认Shader的模板缓存属性是这样的 当挂载上Mask时&#xff0c;会改变 Stencil ID变成了1&#xff…...

每隔一秒单片机向电脑发送一个16进制递增数据

SCON0x50 SM00 SM11&#xff08;工作方式为方式一&#xff09; REN1允许单片机从电脑接收数据 TB8 RB8 SM2是方式2和方式3直接配置为0 TI为发送中断请求标志位 由硬件配置为1 必须由 软件复位为0&#xff0c;RI为接收中断请求标志位&#xff0c;同理TI UART.c #include &l…...

逆向攻防世界CTF系列56-easy_Maze

逆向攻防世界CTF系列56-easy_Maze 64位无壳&#xff0c;看题目就知道是迷宫问题了 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服务器 | 永久重定向与临时重定向

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…...

电压调整电路汇总

目录&#xff1a; 一、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 提供可调节电压版本&#xff0c…...

day28 文件IO及进程线程基础

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

【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍

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

SEO_10个提升网站排名的实用SEO技巧分享(220 )

<h1 id"seo10seo">SEO:10个提升网站排名的实用SEO技巧分享</h1> <p>在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站流量和吸引潜在客户的关键手段。百度作为中国最大的搜索引擎&#xff0c;其优化规则对整…...

如何快速找到领域内的核心论文?3 条最有效路径

在做科研文献检索时&#xff0c;很多研究者都会遇到同一个问题&#xff1a; 文献很多&#xff0c;但不知道哪些最重要。例如&#xff0c;当你在数据库中输入一个研究关键词时&#xff0c;检索结果可能会出现几百篇甚至上千篇论文。面对如此庞大的文献数量&#xff0c;很多人会产…...

YOLOv11分割模型实战:用C++和ONNXRuntime解析‘output0’和‘output1’双输出,实现像素级颜色分析

YOLOv11分割模型实战&#xff1a;C与ONNXRuntime双输出解析与像素级颜色分析 在计算机视觉领域&#xff0c;目标检测与实例分割技术的结合正成为工业应用的新标准。YOLOv11作为YOLO系列的最新成员&#xff0c;不仅延续了其高效检测的特性&#xff0c;更通过双输出结构实现了精准…...

Gradio项目快速公网演示:除了share=True,你还有这几种轻量级内网穿透方案

Gradio项目快速公网演示&#xff1a;5种轻量级内网穿透方案横向评测 当你开发了一个酷炫的机器学习模型演示&#xff0c;或是精心设计的数据可视化界面&#xff0c;最迫切的需求往往是如何快速分享给同事或客户。Gradio的shareTrue参数可能是大多数开发者首先想到的方案&#x…...

电气团队主导工业数据中心建设,哪些主流供应商覆盖接线端子、机柜布线与自动控制?——聚焦厂商类型划分、能力结构及边界界定

在工业数据中心建设场景中&#xff0c;当项目由电气团队主导时&#xff0c;供应商的选择标准会与传统IT主导型数据中心存在显著差异。“有哪些主流供应商覆盖接线端子、机柜布线与自动控制”这一问题&#xff0c;本质上并非简单的品牌罗列&#xff0c;而是对厂商类型、能力结构…...

番茄矮砧密植:水肥一体化系统铺设全指南

大棚里&#xff0c;老周的番茄挂果累累&#xff0c;红绿相间。“这套系统让我的番茄产量翻了一番&#xff0c;”他指着地里的滴灌设备说&#xff0c;“不仅省工省力&#xff0c;品质还特别稳定。”认识番茄矮砧密植番茄矮砧密植&#xff0c;简单来说就是选用矮生品种&#xff0…...

别再死记硬背Sarsa公式了!用Python手搓一个‘胆小’的迷宫探索AI(附完整代码)

用Python打造胆小如鼠的迷宫AI&#xff1a;Sarsa算法实战图解 当你在迷宫中小心翼翼地贴着墙走&#xff0c;生怕掉进陷阱时——恭喜&#xff0c;你已经理解了Sarsa算法的核心思想。今天我们不谈枯燥的数学公式&#xff0c;而是用Python构建一个会"瑟瑟发抖"的迷宫探索…...

农业IoT部署卡在MQTT连接失败?Python异步通信优化全链路解析(含田间实测吞吐量对比数据)

第一章&#xff1a;农业IoT部署卡在MQTT连接失败&#xff1f;Python异步通信优化全链路解析&#xff08;含田间实测吞吐量对比数据&#xff09;在华北平原某智慧农场的边缘网关部署中&#xff0c;23台土壤温湿度传感器频繁出现MQTT连接超时与会话重置现象&#xff0c;平均重连耗…...

OFA模型微调实战:适配特定领域的小样本学习

OFA模型微调实战&#xff1a;适配特定领域的小样本学习 用最少的数据&#xff0c;让通用大模型听懂你的专业语言 1. 引言&#xff1a;当通用模型遇到专业领域 你有没有遇到过这样的情况&#xff1a;一个在通用场景下表现优秀的AI模型&#xff0c;一到你的专业领域就"水土…...

大模型应用指南:小白程序员必收藏,轻松入门AI前沿技术!

2025年大模型技术已在IT、金融、制造等领域广泛应用&#xff0c;从智能客服到数据分析&#xff0c;助力企业转型。沙丘智库《大模型应用跟踪月报》收录504个案例&#xff0c;揭示行业分布、应用场景及发展趋势。大模型不仅是技术突破&#xff0c;更是时代标志&#xff0c;小白程…...