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

相机的标定

文章目录

  • 相机的标定
      • 标定步骤
      • 标定结果
      • 影响因素
      • 参数分析
      • 精度提升
          • 一、拍摄棋盘格
          • 二、提升标定精度
      • 标定代码实现

相机的标定

双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果,同时考虑了不同光照条件和镜头光圈大小等因素对标定结果的影响。

标定步骤

  1. 准备标定板

    • 使用一个具有明显特征点的标定板,如棋盘格标定板。
    • 确保标定板平整且特征点清晰可辨。
  2. 固定相机位置

    • 将双目相机固定在稳定的三脚架或支架上。
    • 调整相机位置,确保标定板完全位于相机的视野内。
  3. 采集标定图像

    • 在不同的角度和距离下,移动标定板并拍摄多组图像(通常建议至少15组)。
    • 确保图像中标定板的特征点清晰可见。
  4. 使用标定软件

    • 可以使用OpenCV、MATLAB等提供的相机标定工具。
    • 导入拍摄的标定图像,并识别标定板上的特征点。
  5. 计算标定参数

    • 通过软件计算相机的内参(如焦距、主点坐标等)和外参(如旋转矩阵和平移向量)。
    • 同时,软件还会给出畸变系数等参数。
  6. 立体校正和验证

    • 使用标定参数进行立体校正,确保左右相机的图像在同一水平线上对齐。
    • 通过拍摄实际场景验证标定的准确性,观察立体匹配的效果。

标定结果

  • 标定参数:包括相机的内参(焦距、主点等)、外参(旋转矩阵、平移向量)和畸变系数。
  • 误差分析:标定软件通常会给出重投影误差等指标,用于评估标定的准确性。重投影误差越小,说明标定越准确。

影响因素

  1. 光照条件

    • 强光或弱光条件下,标定板的特征点可能不够清晰,影响标定的准确性。
    • 建议在均匀且适度的光照条件下进行标定。
  2. 镜头光圈大小

    • 光圈大小影响景深和图像亮度。过大或过小的光圈都可能导致标定板上的特征点模糊。
    • 选择适中的光圈大小,以获得清晰的标定图像。

综上所述,双目相机的标定是一个精确且细致的过程,需要考虑多种因素以确保标定的准确性。通过遵循上述步骤并注意影响因素,可以获得高质量的标定结果,从而实现双目相机的准确聚焦和成像。

角点的数量:如果标定板格子是12x9的,那么格点的数据则是11x8

Calibration Error: 0.26985438768011444
Intrinsic Matrix:[[9.64900471e+04 0.00000000e+00 4.00956403e+02][0.00000000e+00 9.84639627e+04 5.17965206e+02][0.00000000e+00 0.00000000e+00 1.00000000e+00]]
Distortion Coefficients:[-7.27106948e+00  4.02668787e-02 -2.75489644e-02 -1.58608135e-022.25903054e-04]

这些参数通常与计算机视觉中的相机标定(Camera Calibration)相关。相机标定是确定相机的内部参数(内参)和畸变系数的过程,以便更准确地从图像中获取信息。下面我会解释这些参数的含义:

  1. Calibration Error:

    • Calibration Error: 0.26985438768011444 表示相机标定的误差。这个数值越小,说明标定越准确。误差是通过比较标定板上角点的实际图像坐标与通过标定参数计算得到的图像坐标之间的差异来计算的。
  2. Intrinsic Matrix:

    • 这个矩阵描述了相机的内部几何和光学特性,通常包含焦距(fx, fy)、主点(cx, cy)等参数。矩阵的形式一般为:

      [fx  0  cx]
      [ 0 fy cy]
      [ 0  0  1]
      

      在你给出的数据中:

      • fx = 9.64900471e+04fy = 9.84639627e+04 是相机在x和y方向上的焦距(以像素为单位)。
      • cx = 4.00956403e+02cy = 5.17965206e+02 是图像坐标系中相机的主点坐标。
      • 矩阵的第三行是标准形式,表示这是一个齐次坐标变换。
  3. Distortion Coefficients:

    • 这些系数用于纠正由于相机镜头畸变引起的图像变形。常见的畸变包括径向畸变和切向畸变。
    • 在你给出的数据中,有五个畸变系数:
      • k1 = -7.27106948e+00 通常是径向畸变的主要系数。
      • k2 = 4.02668787e-02, k3 = -2.75489644e-02 可能是径向畸变的高阶系数。
      • p1 = -1.58608135e-02, p2 = 2.25903054e-04 通常是切向畸变的系数。

通过这些参数,你可以对相机拍摄的图像进行畸变校正,以及从图像坐标转换到真实世界坐标等。这在许多计算机视觉应用中,如三维重建、目标跟踪、机器人导航等,都是非常重要的。

参数分析

在相机标定过程中,内参和外参是否会随着标定板的变化而变化,这个问题可以从两个方面来分析:

一、内参

  1. 内参是描述相机内部属性的参数,包括焦距、主点(光学中心)坐标、畸变系数等。
  2. 这些参数通常在相机标定时确定,并且对于特定相机型号是固定的,不随时间变化。
  3. 因此,内参不会随着标定板的变化而变化。无论标定板的形状、大小或位置如何改变,相机的内部属性如焦距、主点坐标等保持不变。

二、外参

  1. 外参是描述相机在世界坐标系中的位置和姿态的参数,包括旋转矩阵和平移向量。
  2. 这些参数与相机和标定板之间的相对位置关系密切相关。
  3. 当标定板的位置或方向发生变化时,相机的外参也会随之变化。例如,如果移动相机或更改拍摄角度,外参会随之调整以反映这些变化。
  4. 因此,外参会随着标定板的变化而变化。具体来说,当标定板与相机的相对位置或姿态发生改变时,需要重新进行标定以获取准确的外参。

三、畸变系数

  1. 畸变系数的定义

    • 畸变系数是描述相机镜头制造偏差等因素导致的成像失真系数,主要包括径向畸变系数和切向畸变系数。
    • 这些畸变系数是相机本身的固有属性,与相机的制造和组装过程有关。
  2. 标定板的作用

    • 标定板在相机标定过程中主要用于提供已知的几何特征(如棋盘格的角点),以便通过图像处理算法来估计相机的内外参数和畸变系数。
    • 标定板的变化可能包括其位置、方向或图案的变化。
  3. 畸变系数与标定板的关系

    • 虽然标定板用于估计畸变系数,但畸变系数本身并不会因为标定板的变化而变化。
    • 畸变系数是相机镜头的固有特性,与标定板无关。标定板只是用于测量和估计这些系数的工具。
  4. 实验观察与结论

    • 在实际标定过程中,可能会观察到畸变系数的估计值随着标定板的不同设置(如不同位置、角度或图案)而有所差异。然而,这种差异主要是由于标定过程中的误差、图像噪声或算法的不稳定性引起的,并非畸变系数本身发生了变化。
    • 因此,可以归纳出结论:畸变系数不会随着标定板的变化而变化。它们是相机的固有属性,只与相机的镜头质量和组装工艺有关。

综上所述,

内参是相机的固有属性,不会因标定板的变化而改变;而外参则与相机和标定板之间的相对位置关系密切相关,当这种关系发生变化时,外参也需要相应地进行调整。

畸变系数是相机的固有特性,不会因标定板的变化而改变。标定板只是用于测量和估计这些系数的工具,而估计值的差异主要来源于标定过程中的各种误差和不确定性。

外参在计算机视觉和机器人领域中起着至关重要的作用。以下是对外参的详细解释:

一、定义

外参,即外在参数,是描述相机或传感器在世界坐标系中的位置和姿态的参数。它通常包括旋转矩阵和平移向量,这些参数确定了相机或传感器相对于一个固定参考坐标系的位置和方向。

二、作用

  1. 定位与姿态估计:外参的主要作用是确定相机或传感器在空间中的精确位置和姿态。这对于许多应用来说至关重要,如机器人导航、自动驾驶车辆、增强现实和虚拟现实等。

  2. 多传感器融合:在多个传感器(如多个摄像头、激光雷达等)同时使用的系统中,外参标定可以帮助系统理解每个传感器之间的相对位置关系,从而实现多传感器数据的准确融合。

  3. 三维重建与立体视觉:在立体视觉中,通过两个或多个相机的外参标定,可以确定它们之间的相对位置和姿态关系,进而利用这些关系进行三维场景的重建。

三、应用场景与案例

  1. 自动驾驶:在自动驾驶车辆中,车载摄像头、激光雷达等传感器的外参标定对于实现精确的环境感知和定位至关重要。通过外参标定,车辆能够更准确地判断周围物体的位置和距离,从而提高行驶的安全性和准确性。

  2. 机器人导航:在机器人导航中,外参标定有助于机器人确定自身在空间中的位置和姿态。这对于机器人执行各种任务(如抓取、移动等)时的精确定位和路径规划非常重要。

  3. 增强现实(AR):在AR应用中,外参标定可以帮助虚拟图像与现实世界精确对齐。通过标定摄像头与现实世界的相对位置关系,AR系统能够在用户视野中正确地叠加虚拟元素,从而提供沉浸式的体验。

  4. 三维测量与建模:在工业测量、建筑设计等领域,外参标定是实现精确三维测量和建模的关键步骤。通过标定多个相机之间的外参关系,可以从不同角度捕捉物体的图像并重建其三维模型。

综上所述,外参在计算机视觉和机器人领域具有广泛的应用价值。通过精确的外参标定,我们可以实现更准确的定位、姿态估计以及多传感器数据融合等功能,从而推动相关技术的发展和应用创新。

精度提升

一、拍摄棋盘格

为获得最佳效果,请使用至少10到20张包含校准图案的图像。 校准器至少需要三个图像。 尽量使用未压缩或压缩损失很小的图像格式(如png或bmp)。 为了更高的校准精度你需要:

  • 获取一部分你所关注的距离处的棋盘格图片,比如你要测量2米远的物体,那么请将棋盘放在距离相机2米左右的地方拍摄一部分图片

  • 棋盘表面和相机成像平面的夹角必须小于45度

不要修改图像,比如对其进行剪切

不要使用自动聚焦模式或改变图像的放大倍率

以相对于相机的不同方向拍摄棋盘图像

尽量采集各种不同的棋盘图像。镜头的畸变从图像中心径向增加,并且有时在图像各帧上表现不均匀, 为了获取图像的畸变信息,棋盘应当处在图像的各种不同边缘处

确保棋盘图案在左右两幅图像中都能被完整的显示

在每一对图像中尽量保持棋盘静止,也就是在同一时间拍摄。 若棋盘在两幅图像中发生了相对运动,会对标定精度产生负面影响

若想对远距离的重建获得更高的精度,需要将两个相机的距离调整的更大。

二、提升标定精度

添加或删除图像

添加图像:

  • 少于10张图像时
  • 棋盘没有覆盖足够的图像帧时
  • 棋盘与相机的相对方向变化不够多时

删除图像:

  • 删除具有较大重投影误差的图像
  • 删除太模糊的图像
  • 删除棋盘平面与相机平面夹角超过45度的图像

标定代码实现

import cv2
import numpy as np
import globdef main():# 参数设置criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)w, h = 11, 8  # 棋盘格内角点数量(亲自数)objp = np.zeros((w * h, 3), np.float32)objp[:, :2] = np.mgrid[0:w, 0:h].T.reshape(-1, 2)# 存储角点信息objpoints = []  # 三维世界坐标imgpoints = []  # 二维图像坐标# 加载并处理图像images = glob.glob('data/d2/*.jpg')for fname in images:img = cv2.imread(fname)# img = cv2.resize(img, (768, 1024))  # 统一图像大小gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# gray = cv2.GaussianBlur(gray, (11, 11), 0)  # 滤波处理# 寻找棋盘格角点ret, corners = cv2.findChessboardCorners(gray, (w, h), None)if ret:corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)  # 亚像素级角点检测m = [c[0] for c in corners]objpoints.append(objp)imgpoints.append(corners)# 可视化和保存结果cv2.drawChessboardCorners(img, (w, h), corners, True)cv2.imshow('Corners Found', img)cv2.waitKey(100)# 根据需要保存图像,这里以序号命名cv2.imwrite(f"result/mm_{len(imgpoints)}.jpg", img)else:print(f"Calibration failed for image: {fname}")cv2.destroyAllWindows()# 相机标定ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, (768, 1024), None, None)# 输出标定结果print("Calibration Error:", ret)print("Intrinsic Matrix:\n", mtx)print("Distortion Coefficients:\n", dist.ravel())# 如果需要,可以保存或进一步处理旋转向量和平移向量# print("Rotation Vectors:\n", rvecs)# print("Translation Vectors:\n", tvecs)if __name__ == '__main__':main()

相关文章:

相机的标定

文章目录 相机的标定标定步骤标定结果影响因素参数分析精度提升一、拍摄棋盘格二、提升标定精度 标定代码实现 相机的标定 双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果,同时考虑了不同光照条件和镜头光圈大小等因素对…...

C# 利用XejeN框架源码,编写一个在 Winform 界面上的语法高亮的编辑器,使用 Monaco 编辑器

析锦基于Monaco技术实现的Winform语法高亮编辑器 winform中,我们有时需要高亮显示基于某种语言的语法编辑器。 目前比较强大且UI现代化的,无疑是宇宙最强IDE的兄弟:VS Code。 类似 VS Code 的体验,可以考虑使用 Monaco Editor&a…...

03- jQuery事件处理和动画效果

1. jQuery的事件处理 1.1 绑定事件处理函数 on() 将一个或多个事件的处理方法绑定到被选择的元素上。on()方法适用于当前或未来的元素,如用脚本创建的新元素。 $(selector).on(event,childSelector,data,function) 参数描述event必需。规定要从被选元素添加的一…...

RabbitMQ 入门

目录 一:什么是MQ 二:安装RabbitMQ 三:在Java中如何实现MQ的使用 RabbitMQ的五种消息模型 1.基本消息队列(BasicQueue) 2.工作消息队列(WorkQueue) 3. 发布订阅(Publish、S…...

物联网协议应用

目录 前言一、WIFI简介二、NTP协议2.1 NTP简介2.2 NTP实现 三、HTTP协议3.1 HTTP协议简介3.2 HTTP服务器 四、MQTT协议4.1 MQTT协议简介4.1.1 MQTT通信模型4.1.2 MQTT协议实现原理4.1.3 MQTT 控制报文 4.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和M…...

十分钟学会微调大语言模型

有同学给我留言说想知道怎么训练自己的大语言模型,让它更贴合自己的业务场景。完整的大语言模型训练成本比较高昂,不是我们业余玩家能搞的,如果我们只是想在某个业务场景或者垂直的方面加强大模型的能力,可以进行微调训练。 本文…...

结合简单工厂和工厂方法模式:实现灵活的对象创建

前言 在软件开发过程中,创建对象的方式直接影响代码的灵活性和可维护性。设计模式提供了一种解决复杂问题的方法,其中简单工厂模式和工厂方法模式是两种常用的创建型模式。在这篇文章中,我们将结合这两种模式,通过一个实际案例&a…...

网抑云特殊版,登录即永久

前言 今天分享一款特殊版本的音乐软件,相信大家在听网抑云的时候会有两大烦恼, 一是歌曲需要开通VIP才可以收听,不管怎么说也是国内厂商普遍操作 但是第二种烦恼你万万想不到的是,开通了会员后,惊奇的发现&#xff…...

Kotlin 实战小记:No-Arg 引用解决 No constructor found的问题

一、问题 新的项目试用一下kotlin, 调用数据库查询数据的时候报了这个问题:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.neusoft.collect.entity.cm.CmRoom matc…...

HTML(5)——列表表格

列表 无序列表 作用:布局排列整齐的不需要规定顺序的区域。 标签:ul嵌套il,ul是无序列表,li是列表条目 注:ul标签只能包裹li标签,li标签可以包含任何内容 有序列表 作用:布局排列整齐的需…...

FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介 FreeBSD、CBSD、Jail和Ubuntu,四者的组合方案可以说是强强联合,极具性价比和竞争力!同时安装简单方便,整体方案非常先进。 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案…...

SpringCloud总结(springcloud alibaba)

目录 版本说明(很重要) springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…...

轻轻松松上手的LangChain学习说明书

本文为笔者学习LangChain时对官方文档以及一系列资料进行一些总结~覆盖对Langchain的核心六大模块的理解与核心使用方法,全文篇幅较长,共计50000字,可先码住辅助用于学习Langchain。 一、Langchain是什么? 如今各类AI…...

全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库

本文全面探讨了Milvus、PGVector、Zilliz等向量数据库的特性、性能、应用场景及选型建议,通过详细的对比分析,帮助开发者和架构师根据具体需求选择最合适的向量数据库解决方案。 文章目录 向量数据库概述向量数据库的关键功能向量数据库的扩展和选择向量…...

svm 超参数

https://www.cnblogs.com/ChevisZhang/p/12932674.html https://wenku.baidu.com/view/b8a2c73cfd4733687e21af45b307e87100f6f861.html?wkts1718332423081&bdQuerysvm%E7%9A%84%E8%B6%85%E5%8F%82%E6%95%B0 用交叉验证找到最好的参数 C 和γ 。使用 RBF 核时&#xff0c…...

001-基于Sklearn的机器学习入门:Sklearn库基本功能和标准数据集

本节将介绍Sklearn库基本功能,以及其自带的几个标准数据集的调用方法。本节是学习后面内容的基础,如果您已经对本节内容相当熟悉,可跳过本节内容。 1.1 Sklearn库基本功能 的 1.2 Sklearn库标准数据集 Sklearn自带许多标准数据集&#xff…...

充电学习—7、BC1.2 PD协议

BC1.2(battery charging)充电端口识别机制: SDP、CDP、DCP 1、VBUS detect:vbus检测 PD(portable device,便携式设备)中有个检测VBUS是否有效的电路,电路有个参考值,高…...

技术点梳理0618

ann建库,分布式建库,性能优化,precision recall参数优化 hnsw,图索引 1. build a)确定层:类似跳表思路建立多层,对每一个插入的节点,random层号l,从图的起始点search_…...

石英砂酸洗提纯方法和工艺

石英砂酸洗提纯方法和工艺是石英砂加工中至关重要的一个环节,其目的是通过化学手段去除石英砂中的杂质,提升其纯度。以下将详细介绍石英砂酸洗提纯的方法和工艺,以便更好地理解和应用这一技术。 一、概述 石英砂酸洗提纯主要是利用酸液对石英…...

linux安装dgl

1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl或者直接安装https://blog.csdn.net/weixin_44017989/article/details/13…...

【SAP-ABAP】-权限批导-批量给某个角色导入事务码权限

需求:SAP期初上线的时候,业务顾问经常会遇到批量创建角色和分配角色权限的情况 岗位需求:一般是业务顾问定义权限,BASIS进行后期运维,今天讲两个批导功能,方便期初上线 主要函数:PRGN_READ_ROLE…...

异常处理总结

自定义异常 ​ 系统中的异常可以分为我们能预知的异常和未知的系统异常,对于我们能预知的异常如空值判断,用户名错误,密码错误等异常我们需要返回客户端,对于系统内部异常如SQL语法错误,参数格式转换错误等需要统一包…...

大模型日报2024-06-18

大模型日报 2024-06-18 大模型资讯 大模型产品 Olvy 3.0:AI加速客户反馈分析 摘要: Olvy 3.0推出AI自动监听和智能标签功能,通过Google Meet集成轻松提取洞察,贴近客户,激发同理心。 PlantIdentify-免费植物识别应用 摘要: PlantI…...

NumPy 双曲函数与集合操作详解

NumPy 双曲函数 NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc,它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。 示例: import numpy as npx np.sinh(np.pi/2)print(x)示例 找到数组 arr 中所有值的双曲余弦值: import…...

ABSD-系统架构师(十三)

1、CDN和反向代理的基本原理都是()。 A缓存 B负载均衡 C路由转发 DNAT转发 答案:A 2、(必考)在ABSD(基于架构的软件开发)方法中,顶层被分解为()&#xff…...

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯

一、背景 Modbus协议和Profibus协议是两种常用于工业控制系统的通信协议,它们在自动化领域中起着重要的作用。Modbus是一种串行通信协议,被广泛应用于各种设备之间的通信,如传感器、执行器、PLC等。而Profibus则是一种现场总线通信协议&…...

第二十三篇——香农第二定律(二):到底要不要扁平化管理?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 对于企业的理解,扁平化的管理,如果从香农第二定律…...

stm32f103 HAL库 HC-SR04测距

目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…...

vue中通过自定义指令实现一个可拖拽,缩放的弹窗

效果 功能描述 按住头部可拖拽鼠标放到边框,可缩放多层重叠丰富的插槽,易于扩展 示例 指令代码 export const dragDialog {inserted: function (el, { value, minWidth 400, minHeight 200 }) {// 让弹窗居中let dialogHeight el.clientHeight ?…...

FreeRtos-09事件组的使用

1. 事件组的理论讲解 事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出 #define configUSE_16_BIT_TICKS 0 //configUSE_16_BIT_TICKS用1表示16位,用0表示32位 1.1 事件组适用于哪些场景 某个事件若干个事件中的某个事件若干个事件中的所有事…...

php网站制作实例教程/上海今天最新发布会

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求要把行转换为列,根据原表给定列的每个值创建一个列。例如,返回每个员工及他们的职位(JOB),目前的查询返回如下结果…...

wordpress主题设置导出/大一网页设计作业成品

这题比较简单,主要是list.sort的运用,策略:先将导弹的射程高度从大到小排序,之前需要记录导弹发射时时间上的相对位置。然后对排好序的list遍历,每次找到所有比开头导弹射程高度小的最大的导弹,删除这些导弹…...

沂南网站设计/风云榜百度

转载于:https://www.cnblogs.com/yoursmlie/p/8846778.html...

德州哪里有做网站推广的/中国教育培训网

用户和组管理用户账户组账户权限分配 Cisco开发并建立了AAA认证体系:Authentication:认证,核实使用者身份;Authorization:授权,对已经核实身份的使用者进行资源分配;Accounting:审计…...

温州做外贸网站/如何提高网站排名seo

来源:cnblogs.com/aspirant/p/5697807.html在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号&#…...

动态网站整站源码下载器/湖南专业的关键词优化

说明 在使用git提交代码的时候总是会遇到对于文件名称修改的情况,其他情况下git还是可以识别出删除和新增的文件的,但是在大小写修改的时候,git默认是不区分大小写的,导致在本地显示是正确的但是在远程仓库出现了一个大写一个小写…...