相机标定不再愁:用OpenCV自建高精度标定板原图全流程
第一次做相机标定的时候我差点被一个看起来特别简单的环节劝退找标定板原图。网上确实能搜到各种现成的标定板图片但下载之后往往要么角点检测不到、要么整张板边缘发虚更要命的是根本不知道这张图打印出来以后每个格子到底是多少毫米。后来我才意识到与其到处找“别人家的标定板”不如自己动手生成标定板原图把格子数量、每格物理尺寸、输出分辨率全部握在自己手里。这篇文章我把从选型、生成、打印到验收的全流程写一遍里面不少参数和坑是文档里不会写的适合刚接触相机标定、想用代码而不是到处找图的读者参考。1. 标定板原图是整个标定流程的地基先弄明白它为什么重要1.1 标定的本质是求解相机怎么把3D世界映射到2D像素相机标定听起来高深拆开看其实是在做一件事求解相机从三维世界坐标到二维像素坐标的映射关系。经典的针孔模型可以写成下面这个简洁形式s * [u, v, 1]^T K * [R | t] * [X, Y, Z, 1]^T其中u, v是像素坐标X, Y, Z是世界坐标s是尺度因子K是内参矩阵里面包含fx, fy, cx, cy四个关键值分别代表焦距和主点位置。R和t描述的是相机相对于世界坐标系的旋转和平移属于外参。标定要做的事情就是给定一批已知三维坐标的点以及它们在图像里对应的像素坐标反推这些内参和外参。这里最关键的约束是那些三维坐标必须是已知的、精确的。标定板原图存在的意义就是把这些“已知点”物理化——棋盘格的角点、圆点阵列的圆心它们在空间中的相对位置完全由标定板决定。如果标定板原图的物理尺寸不准比如你以为每个格子是20毫米实际打印出来是20.8毫米那么标定出的焦距就会带上同样的尺度偏差。用在双目测距或三维重建项目里所有输出的深度值和真实距离都会系统性偏移。很多新手把标定失败归咎于算法其实根源是一张尺寸不可控的标定板原图。1.2 网上下载的标定板为什么经常“带毒”我自己也走过下载现成图片的弯路总结下来这类图主要有几个隐患第一分辨率不等于物理精度。一张图片分辨率再高只要你不知道打印时的缩放比例就永远不知道自己打印出来的格子实际是几毫米。很多下载图片甚至连格子数量的说明都没有。第二图片可能被压缩和拉伸。有些网站上放的标定板图片为了适配网页布局长宽比并不是正方形保存时还可能带入了缩放。一旦打印比例失调角点坐标的世界坐标就不符合假设。第三边缘不够锐利。很多图片经过JPG压缩之后黑白格边缘会出现灰色的过渡带。角点检测依赖梯度变化灰边会直接影响亚像素角点定位的精度。自己做原图本质上是在把这些不确定性全部消灭掉图案是纯代码生成的像素值严格是0和255边缘锐利格子边长和物理尺寸之间的关系可以由打印参数精确控制每个格子数量、每格多少毫米全部由自己定义。1.3 一张合格的标定板原图该满足哪些条件根据我多次标定的经验一张合格的原图至少要满足这几点纯黑白灰度图不使用彩色也不使用抗锯齿边缘避免影响角点梯度计算。黑白格交界线是直线没有毛刺和渐变。四周留出足够空白边界防止打印时裁切掉边缘格子。图案参数与后续程序填写的patternSize严格对应。原图附带清晰的“格子数量 每格物理尺寸 打印DPI”信息方便后续复现。这些条件并不难达到用代码生成比手工画图或者下载图片可靠得多。2. 棋盘格、圆点阵列还是ChArUco不同标定板原图的适用场景2.1 棋盘格原图普及度高但要避开对称歧义棋盘格是OpenCV标定工具里最经典的输入也是大多数教程默认的第一选择。它的优势很明显黑白方格交替排列角点特征密集检测算法成熟任何一枚内角点都是一个高质量的标定特征点。不过画棋盘格时有一个容易忽略的设计原则行列方向上的格子数量最好一个是奇数一个是偶数或者整体上避免出现旋转对称。整块棋盘如果按180度旋转后图案完全一样检测程序在对称姿态下可能会把左上角误判成右下角这在OPENCV的老版本里尤其容易出现。我平时常用的是10列×7行的格子布局对应的内角点是9×6。这个尺寸在普通A4纸上打印出来格子边长控制在15到25毫米之间比较合适。如果格子数太少一张图提取的角点数不够输入到标定算法里的约束不足格子数太多每个格子在图像里又显得过小亚像素检测的精度受影响。2.2 圆点阵列工业场景与低噪声环境的替代选择棋盘格角点检测在大多数场景下都稳定但如果你在工业检测里用过就会知道圆点阵列标定板也很常见。圆点阵列的圆心检测不像角点那样依赖两条边缘的交叉而是通过拟合圆的边缘估算圆心在一些图像噪声大、边缘模糊的场景下反而更鲁棒。圆点阵列又分对称和不对称两种。对称排列的圆点阵列存在方向歧义——旋转180度后程序分不清哪边是上。所以实际工程中更推荐不对称圆点阵列通常是让横向和纵向的点数不同或者让某一排的点稍微偏移这样检测程序能明确判断出标定板的空间姿态。圆点阵列的缺点也比较明显圆点边缘要求非常均匀如果用喷墨打印机导致边缘墨水扩散圆心的拟合精度就会受影响。相比之下棋盘格的容错度更高一些。2.3 ChArUco标定板遮挡和大倾角场景下的取巧方案最近几年做单目或者多目标定我越来越喜欢用ChArUco标定板。它本质上是在棋盘格里嵌入ArUco编码标记每个格子都带有唯一ID。这样即使标定板的一部分被遮挡、或拍摄角度太大导致棋盘格检测连续失败程序仍然能根据部分可见的ArUco码恢复出标定板位姿。ChArUco原图在OpenCV里可以直接生成它的检测流程比纯棋盘格复杂一些但可靠性高很多。如果你经常需要做多视角标定或者标定板周围有机械臂、人手等遮挡物ChArUco是不错的选择。三种类型对比如下标定板类型检测API对遮挡鲁棒性打印要求适用场景棋盘格findChessboardCorners低整块板需完整可见黑白格子边缘清晰即可常规单目、双目标定圆点阵列findCirclesGrid低需要完整圆形圆度要求高工业视觉、精密测量ChArUcoCharucoBoard Aruco检测高部分可见可用格子带编码图案较复杂多目标定、遮挡场景3. 用OpenCV生成高可用原图的实操代码与参数详解3.1 一个干净的棋盘格生成脚本先给一份我目前一直在用的生成脚本它足够简单没有任何多余依赖只需要numpy和opencv-python。import cv2 import numpy as np # 格子数量10列 x 7行对应的内角点数量是9 x 6 cols 10 rows 7 # 每个格子用多少像素表示 pixels_per_square 100 # 四周留白防止打印裁切 margin 100 # 创建灰度图 image np.zeros((rows * pixels_per_square 2 * margin, cols * pixels_per_square 2 * margin), dtypenp.uint8) # 填充黑白方格 for i in range(rows): for j in range(cols): if (i j) % 2 0: x0 margin j * pixels_per_square y0 margin i * pixels_per_square image[y0:y0 pixels_per_square, x0:x0 pixels_per_square] 255 cv2.imwrite(checkerboard_10x7_100px.png, image)这段代码生成的是一张纯灰度图黑色为0白色为255黑白格之间没有任何过渡。用imwrite保存PNG格式时也不会引入压缩伪影。3.2 参数为什么这么定patternSize、pixels_per_square与margin这里有几个参数特别值得展开说清楚因为它们直接决定标定程序能不能正确识别。第一个是patternSize。OpenCV的findChessboardCorners接受的参数是内角点数而不是格子数量。比如我要的是10列×7行格子那么内角点数量就是(10-1, 7-1) (9, 6)。代码里写的是格子数标定时传给OpenCV的却是内角点数这一步反了或者混了程序会一直报检测失败。第二个是pixels_per_square也就是每个格子用多少像素表示。我的建议是不要低于20最好在80到120之间。像素太小打印出来以后每个格子的边缘在图像里可能只占一两个像素角点检测的强度不够像素太大也不会带来额外精度提升因为打印机的物理分辨率和相机的光学分辨率是瓶颈反而会让PNG文件很大处理起来慢。第三个是margin。很多新手生成的标定板是格子铺满整张图的打印时一旦裁掉一点点边框最外圈的角点就没了整张板可用性大减。留白至少要比一个格子的边长还多我习惯设置成和格子边长相当或更大。另外要特别提醒生成时不要对图像做缩放或抗锯齿处理。如果你保存前用了cv2.resize边缘会出现灰阶插值如果保存成JPEG也会产生类似问题。直接保存为PNG保持原像素尺寸。3.3 从PNG到打印尺寸DPI、物理尺寸与矢量PDF的换算方法生成的PNG本身没有物理尺寸它只有像素。要让“每个格子20毫米”这个参数真正成立必须控制打印输出的缩放比例。举一个实际例子。我设置pixels_per_square 100希望每个格子打印出来是20毫米那么打印分辨率应该满足100像素 / 20毫米 5像素/毫米 ≈ 127 DPI这里127 DPI不是标准打印分辨率很多打印机在驱动设置里并不支持精确填这个值。所以更稳的方案不是直接设DPI而是在排版工具里把标定板的长和宽按毫米指定好然后用“实际大小”或“100%比例”打印。我个人的做法是生成PNG之后用Python的reportlab把它放进一个尺寸精确的PDF页面里让PDF的物理尺寸等于标定板的物理尺寸。打印时选择“实际大小”而不是“适应页面”这样打印出来的格子就非常接近设计值。from reportlab.pdfgen import canvas from reportlab.lib.units import mm board_width_mm 10 * 20 2 * 20 # 格子数 * 每格边长 两倍留白 board_height_mm 7 * 20 2 * 20 c canvas.Canvas(checkerboard.pdf) c.drawImage(checkerboard_10x7_100px.png, 0, 0, widthboard_width_mm * mm, heightboard_height_mm * mm) c.save()这样导出的PDF打印时直接按实际大小出纸手里的标定板尺寸就和设计值一致了。4. 原图生成之后的打印与拍摄环节每一步都可能导致白做4.1 打印标定板原图时最常踩的三个坑标定板原图即使生成得完美打印环节翻车也见过不少。第一个坑是打印机的“缩放”设置。很多人把PDF拖进打印窗口发现页面预览里显示“适应页面”打印出来格子尺寸整体缩水10%甚至更多物理尺寸全乱标定结果自然不对。正确做法是选“实际大小”、“100%比例”甚至可以在预览里拿尺子量一下某个格子的边长再确认。第二个坑是喷墨打印机的墨水扩散。喷墨打印靠墨滴吸附在纸张纤维上普通A4纸上黑白格边缘往往会出现一圈毛边格子越小、毛边占比就越大。角点检测在图像里看到的是边缘模糊的格子亚像素定位精度会明显下降。我建议有条件优先用激光打印机如果只能喷墨选“高质量”模式并让墨水充分干燥后再使用。第三个坑是纸张反光。铜版纸、相纸这类高光纸在室内灯光下会产生强烈的镜面反射拍摄时标定板上一片白角点直接丢失。用哑光纸或者普通打印纸会好很多。4.2 粘贴与平整度纸基板弯曲是重投影误差的主要来源打印好的标定板不能直接拿在手里纸本身容易弯曲尤其在大尺寸标定板上手掌一托就成一个弧形。相机成像模型假设标定板所有角点在同一个平面上如果纸面局部拱起那些角点的真实三维坐标已经偏离平面假设标定结果就会带上一部分误差。解决办法是找一块平整的硬底板比如亚克力板、铝板或高密度泡棉板把打印纸平整地粘上去。粘贴时要挤掉气泡不要用让纸面起皱的胶水最好用少量双面胶在四角固定。我做过一次对比实验同一组图像纸板略微弯曲时重投影RMS在0.5像素左右换到平板之后能降到0.08像素差距非常明显。所以“表面平整度”不是小事。4.3 拍摄采样策略角度、数量和画面占比拿到平整的标定板之后拍摄采集图像也需要讲究很多新手拍出来的图全套正对镜头、标定板还铺满整个画面结果标定程序跑完内参偏差很大。正确的采样策略应该是让标定板在画面中占到大约三分之一到二分之一的位置然后变化角度绕X轴和Y轴各旋转正负20度左右同时改变相机到标定板的距离让标定板出现在画面的不同区域覆盖九宫格的各个位置。单目标定我个人习惯拍20到25张有效图双目标定至少拍15对以上。单纯的正对镜头图像几乎不提供畸变信息拍再多也没用。这里顺便提醒一句采集时标定板不要移动得太快尤其是曝光时间较长的工业相机轻微运动模糊会让角点提取位置偏移这类图在标定程序里表现为重投影误差突然变大只能删掉重拍。5. 生成完成后用检测脚本验收别把不可用的原图带进标定5.1 角点检测验证脚本马上确认原图可识别生成标定板原图之后我强烈建议先跑一段检测脚本确认它能在图像里被正确识别再做打印。这段验证代码很便宜几秒钟就能给出结论。import cv2 # 注意这里传的是内角点数不是格子数 pattern_size (9, 6) img cv2.imread(checkerboard_10x7_100px.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) flags cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_NORMALIZE_IMAGE ret, corners cv2.findChessboardCorners(gray, pattern_size, flagsflags) print(检测结果:, ret) # 打印亚像素角点 if ret: criteria (cv2.TERM_CRITERIA_EPS cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) corners cv2.cornerSubPix(gray, corners, (5, 5), (-1, -1), criteria) cv2.drawChessboardCorners(img, pattern_size, corners, ret) cv2.imwrite(checkerboard_checked.png, img)这里能提前发现几个问题如果patternSize填错检测立刻失败如果生成的图被缩放或加了抗锯齿cornerSubPix的定位会不稳定如果黑白格数量不对程序会一直找不到足够的内角点。这一关过了原图才算真正可用。5.2 重投影误差与内参合理性判断拍完标定图像使用cv2.calibrateCamera后会返回重投影RMS。这个值衡量的是每个角点的三维坐标投影到图像平面后与实际检测到的像素坐标的平均偏差。根据经验RMS小于0.1像素说明标定质量很好小于0.3像素基本可用如果超过0.5像素就要回头检查标定板平整度、图像模糊或参数填写错误。除了RMS还要看一眼内参矩阵是否合理。主点cx、cy应该接近图像中心附近如果偏出几百个像素通常意味着输入图像尺寸不一致或者在标定时传入了不匹配的特征点坐标。5.3 我踩过的数据坑混用不同物理尺寸的标定板最后分享一个我自己踩过的坑某个项目里我先用A4纸打了一块格子边长为20毫米的标定板后来又觉得格子太小打印了一块30毫米的新板子但采集的图像没有分开做两组而是混在一起标定。结果fx和fy来回飘重的投影误差到了0.8像素怎么都修不好。原因很直观标定算法把两种物理距离不同的特征点当成同一尺度关系求解世界坐标系完全被搅乱。正确做法是每次标定只用一块固定尺寸的标定板更换标定板后必须重新采集、重新标定。如果你需要不同尺寸的板子做实验也建议在文件名里直接标清楚物理尺寸比如10x7grid_20mm.png、10x7grid_30mm.png避免后期混淆。我在实际项目中的习惯是把生成脚本保存为一个函数文件每次需要新标定板时只改cols、rows、pixels_per_square和物理尺寸四个参数然后一跑就出原图和PDF。这样看似最不起眼的“标定板”环节反而变成了整个标定流程里最可控、最不会出意外的一环。希望这篇关于生成标定板原图的经验能帮你少走一些我走过的弯路。

相关新闻

security-audit-skill 设计实践:为 coding-agent 构建自动化安全审计能力

security-audit-skill 设计实践:为 coding-agent 构建自动化安全审计能力

1. 从"security-audit-skill"这个名字说起:它到底要解决什么问题第一次看到security-audit-skill这个命名,我的直觉是:这不是一个普通的工具库,而是一个面向编码智能体(coding-agent)的安全审计技…

2026/10/18 20:35:06 阅读更多 →
智能体场景下的 AI搜索工具推荐:TaoToken 统一 Key 接入三款主流搜索 API 的评测分析

智能体场景下的 AI搜索工具推荐:TaoToken 统一 Key 接入三款主流搜索 API 的评测分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 20:35:06 阅读更多 →
用Python从零手写最小AI Agent,揭秘工具调用与记忆原理

用Python从零手写最小AI Agent,揭秘工具调用与记忆原理

最近聊AI Agent的人特别多,但很多教程一上来就抛抽象概念:规划、记忆、工具调用、多Agent协作……听起来很唬人,实际动手却不知道第一行代码该写在哪。这篇文章换个路子,用Python从零手写一个能跑的最小Agent系统,不依…

2026/10/18 20:34:06 阅读更多 →

最新新闻

RAM盘与DISK盘真实性能对比测试方法

RAM盘与DISK盘真实性能对比测试方法

1. 项目概述:为什么一个“测速”动作值得花半天时间认真对待你有没有遇到过这样的情况:明明手里的固态硬盘标称读写速度是3500MB/s,但实际拷贝一个20GB的工程文件却要等三分钟?或者在做视频剪辑时,预览一帧要卡顿两秒&…

2026/10/19 1:33:18 阅读更多 →
AutoCAD圆弧开发的三大底层陷阱与鲁棒实现

AutoCAD圆弧开发的三大底层陷阱与鲁棒实现

1. 这个标题背后藏着的CAD开发真相:为什么“创建圆弧(4)”不是第四个例子,而是关键分水岭看到“2021-07-05 C#/CAD二次开发 创建圆弧(4)”这个标题,很多刚接触CAD开发的朋友第一反应是&#xff…

2026/10/19 1:33:18 阅读更多 →
为什么ShareGPT-4o被称为多模态训练“宝藏数据“?项目价值与核心亮点深度解析

为什么ShareGPT-4o被称为多模态训练“宝藏数据“?项目价值与核心亮点深度解析

【免费下载链接】ShareGPT-4o 项目地址: https://ai.gitcode.com/OpenGVLab/ShareGPT-4o 点击查看 免费下载 ShareGPT-4o 是由 OpenGVLab 开源的 多模态训练数据集(ShareGPT-4o-102K),收录了 10 万余条由 GPT-4o 生成的多轮图文对…

2026/10/19 1:33:18 阅读更多 →
OLYMPUS生化仪液面探测原理:电容+压力双模传感机制解析

OLYMPUS生化仪液面探测原理:电容+压力双模传感机制解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:33:18 阅读更多 →
国产边缘AI芯片选型指南:十五款主流芯片拆解与避坑实操

国产边缘AI芯片选型指南:十五款主流芯片拆解与避坑实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:33:18 阅读更多 →
一颗芯片搞定3.5A快充:宽压同步降压充电方案深度拆解

一颗芯片搞定3.5A快充:宽压同步降压充电方案深度拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:32:18 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →