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()  # 销毁所有窗口
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小发现,如何高级的顺序输出,逆序输出整数的每一位(栈,队列)

当我还是初学者的时候&#xff0c;我经常思考有没有比慢慢求每一位数字然后考虑正序&#xff0c;逆序输出要快的办法...长期琢磨&#xff0c;必有所获&#xff01; 我刚学数据结构的时候还没意识到栈&#xff0c;队列还能这样用&#xff0c;虽然说有点杀鸡用牛刀的感觉&#x…

详细解析RNNoise:基于深度学习的语音噪声抑制技术

引言 在语音通信、语音识别以及音频处理领域&#xff0c;噪声抑制是一个至关重要的任务。环境噪声&#xff0c;如风声、交通声和人群声&#xff0c;通常会影响语音的清晰度和质量&#xff0c;特别是在远程通信和在线会议中。为了提高语音质量&#xff0c;许多噪声抑制技术应运…

【笔记】架构上篇Day6 法则四:为什么要顺应技术的生命周期?

法则四&#xff1a;为什么要顺应技术的生命周期&#xff1f; 简介&#xff1a;包含模块一 架构师的六大生存法则-法则四&#xff1a;为什么要顺应技术的生命周期&#xff1f;&法则四&#xff1a;架构设计中怎么判断和利用技术趋势&#xff1f; 2024-08-29 17:30:07 你好&am…

跟李笑来学美式俚语(Most Common American Idioms): Part 66

Most Common American Idioms: Part 66 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记&#xff0c;自用。 Github仓库链接&#xff1a;https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来&#xff08;或者clone到本地…

【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制

随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…

代码随想录第43天

300.最长递增子序列 # Dynamic programming. class Solution:def lengthOfLIS(self, nums: List[int]) -> int:if not nums: return 0dp [1] * len(nums)for i in range(len(nums)):for j in range(i):if nums[j] < nums[i]: # 如果要求非严格递增&#xff0c;将此行 …

Anaconda Conda Pip 的区别与联系

在Python生态中,Anaconda、Conda和Pip是三个非常重要的工具,它们在包管理和环境管理方面发挥着关键作用。 Anaconda Anaconda是一个为科学计算而设计的Python发行版,它集成了Conda、Python以及大量的数据科学相关库,如NumPy、Pandas等。Anaconda的主要优势在于它提供了一个…

Y3编辑器官方文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)

文章目录 一、新建项目二、 编辑器主界面2.1 游戏场景2.2 导航栏/菜单栏2.3 功能栏三、菜单栏详细介绍3.1 文件3.1.1 版本管理3.1.2 项目管理(多关卡)3.1.2.1 多关卡功能说明3.1.2.2 关卡切换与关卡存档3.2 编辑3.2.1 通用设置3.2.2 键位设置3.3 窗口(日志)3.4 细节3.4.1 语言…

OpenCV相机标定与3D重建(16)将点从齐次坐标转换为非齐次坐标函数convertPointsFromHomogeneous()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::convertPointsFromHomogeneous 是 OpenCV 库中的一个函数&#xff0c;用于将点从齐次坐标&#xff08;homogeneous coordinates&#xff09;…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

vue3使用keep-alive做缓存

暂未整理&#xff0c;等待更新 文章目录 一、注意项1.不生效原因 二、使用步骤1.引入库2.读入数据 总结 一、注意项 1.不生效原因 vue3无beforeRouteEnter&#xff0c;但可以写。<script lang"jsx">需要一致:include"[‘experienceMaintenance’, ‘rea…

Android13应用在后台录音无声音

最近在做项目&#xff0c;对讲应用放在后台&#xff0c;录音无声音&#xff0c;最后解决。 一 现象 对讲应用运行在后台&#xff0c;录音无效查看日志&#xff0c;AudioRecorder录音回调全是0&#xff1b;状态栏无通知&#xff0c;无申请通知权限。 二解决 看了现象应该能够…

数据结构6.3--交换排序

目录 交换排序基本思想 1.冒泡排序 2.快速排序 2.1hoare版本 2.2挖坑法 2.3前后指针版本 交换排序基本思想 所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾…

Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)

效果展示&#xff1a; 在这里&#xff0c;我把视频名称&#xff08;Json&#xff09;和对应的视频资源都放在了StreamingAssets文件夹下&#xff0c;以便于打包后&#xff0c;客户还可以自己在外部增加、删除、修改对应的视频资料。 如有需要&#xff0c;请联细抠抠。

软件工程知识点

软件开发模型1 软件开发模型2 软件过程模型习惯上也称为软件开发模型&#xff0c;它是软件开发全部过程、活动和任务的结构框典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型基于构件的开发模型和形式化方法模型等。 极限编程 开发方法 RUP…

Apache Echarts和POI

目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xf…

LeetCode 1844将所有数字用字符替换

题目&#xff1a; 给你一个下标从 0 开始的字符串 s &#xff0c;它的 偶数 下标处为小写英文字母&#xff0c;奇数 下标处为数字。 定义一个函数 shift(c, x) &#xff0c;其中 c 是一个字符且 x 是一个数字&#xff0c;函数返回字母表中 c 后面第 x 个字符。 运行代码&…

COLA学习之环境搭建(三)

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;上一节&#xff0c;我们学习了COLA代码规范&#xff0c;继续跟老寇学习COLA环境搭建 首先&#xff0c;打开GitHub&#xff0c;搜索 COLA 请给这个COLA项目点个Star&#xff0c;养成好习惯&#xff0c;然后Fork到自…

c++ CMakeLists.txt详解

基本结构 CMake 最低版本声明 用于指定需要的最低 CMake 版本&#xff0c;确保兼容性。 cmake_minimum_required(VERSION 3.10)指定 CMake 的最低版本。确保用户的 CMake 版本符合项目需求&#xff0c;否则报错。版本选择建议根据项目使用的功能决定。例如&#xff0c;3.10 引…

【友加畅捷】软件保存/激活云加密/授权码的时候失败。

【问题现象】 畅捷通T1飞跃专业版&#xff0c;在保存云加密的时候提示&#xff1a; 获取加密失败&#xff0c;请检查数据库是否正确连接。 【解决方法】 服务器目录FYDogServer.ini文件&#xff0c;将DogCloud0改成DogCloud1&#xff0c; 然后重新保存。 【问题现象】 U通用…