ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

C/OpenCV双目相机标定工具箱:从原理到实践的完整指南

C/OpenCV双目相机标定工具箱:从原理到实践的完整指南 简介本资源是一套基于OpenCV与C语言开发的双目立体视觉相机标定工具集面向计算机视觉初学者、嵌入式视觉开发者及三维重建研究者解决单目内参与双目外参联合标定这一核心工程难题。工具集完整覆盖棋盘格图像采集、角点自动检测、相机矩阵与畸变系数求解、双目相对位姿估计并输出标准YAML格式标定文件可直接用于OpenCV立体校正、深度图生成等下游任务。压缩包共101个文件含25张标定示例图像jpg、5个核心C/C源码cpp/c、16个Make构建脚本、14个CMake配置文件、3个可执行二进制程序bin及3个YAML标定结果模板结构清晰支持Linux平台快速编译部署包体仅3.52MB轻量易用。目前已有138人学习下载提供从图像采集到参数导出的端到端实现附带calibrate_stereo主程序、undistort_rectify校验工具及详细CMake构建链显著降低双目标定入门门槛。1. 项目概述一个为双目立体视觉量身定制的C/OpenCV标定工具箱如果你正在用C语言和OpenCV捣鼓双目立体视觉并且被相机标定这个“拦路虎”卡住了那这个工具集可能就是为你准备的。我花了相当长的时间把单目内参标定、双目外参标定、图像采集、参数计算到文件输出这一整套流程用C语言和OpenCV封装成了一个命令行工具集。它的核心目标就一个让你能快速、准确、自动化地完成双目相机系统的标定把那些繁琐的矩阵计算和文件操作都交给程序你只需要准备好棋盘格和相机就行。这个工具集直接解决了几个实际开发中的痛点。首先市面上很多标定教程和代码都是Python的虽然上手快但在一些对实时性、部署环境有严格要求的嵌入式或工业场景里C/C才是主流而纯C的实现就更少了。其次很多标定示例只讲单目或者把双目标定的内外参步骤拆得很散你需要自己写代码串联采集、角点检测、标定计算和文件保存中间任何一个环节出问题都够调试半天。我这个工具把这些步骤都打包好了你拿到手编译后基本上就是“采集图片 - 运行命令 - 拿到标定文件”这样一个流水线操作。它具体能干什么呢简单说就是四件事第一驱动你的单目或双目相机自动拍摄一系列棋盘格标定板的图片。第二分别计算左右相机的内部参数也就是内参包括焦距、主点坐标和畸变系数。第三基于已经标定好的左右相机内参计算它们之间的位置关系也就是外参包括旋转矩阵和平移向量。第四把所有关键的参数——左右相机的内参矩阵、畸变系数、双目的旋转矩阵、平移矩阵甚至包括立体校正所需的映射矩阵——都规整地保存到一个YAML格式的文件里。这个YAML文件就是后续进行立体校正、极线约束和三维重建的“地图”直接可以被你的主视觉程序读取使用。2. 核心设计思路为什么是COpenCV以及如何组织流程2.1 技术栈选型C语言与OpenCV的经典组合选择C语言和OpenCV作为这个工具集的基础是经过实际项目权衡的。在工业视觉、机器人导航或者嵌入式设备上运行环境往往资源受限或者对执行效率有苛刻要求。Python虽然开发效率高但其解释器开销和动态类型在循环密集的图像处理中可能成为瓶颈且依赖管理在离线部署时比较麻烦。C语言编译出的原生二进制程序执行效率高内存占用可控几乎可以在任何有对应编译器的平台上运行部署就是拷贝一个可执行文件那么简单非常适合做成一个“工具”。而OpenCV是计算机视觉领域事实上的标准库其标定模块calib3d经过多年迭代算法鲁棒性和精度都有保障。使用OpenCV的C接口或者C接口然后用extern C封装我们能直接调用cvFindChessboardCorners、cvCalibrateCamera2、cvStereoCalibrate这些久经考验的函数避免了从头实现张正友标定法等复杂算法把精力集中在流程整合和工程优化上。这种组合确保了工具的核心计算部分既稳健又高效。2.2 工具集的整体工作流设计整个工具集的工作流设计遵循了双目标定的标准步骤但将其自动化、模块化了。核心流程可以拆解为三个主要阶段它们既可以串联执行完成一次完整的标定也可以独立运行以满足特定需求比如只更新内参。第一阶段图像采集模块。这个模块负责与相机交互。它并没有绑定某一特定品牌的SDK而是基于OpenCV的VideoCapture。这意味着只要你的相机支持V4L2Linux、DirectShowWindows或任何OpenCV能识别的驱动无论是USB工业相机、笔记本自带摄像头还是经过gstreamer管道转接的复杂视频流理论上都能接入。采集模块会以固定的时间间隔或手动触发的方式同步对于双目或异步捕获左右相机的图像并自动以有规律的命名方式如left_01.jpg,right_01.jpg保存到指定文件夹。一个关键的设计点是它会在界面上实时显示捕获的画面并叠加检测到的棋盘格角点让你能直观地确认当前姿态是否有效、光照是否均匀从而保证采集到的图像质量。第二阶段单目相机标定模块。这是双目标定的基础。该模块会读取第一阶段采集到的、针对单个相机左或右的一系列棋盘格图片。对于每一张图片它使用OpenCV的算法自动查找棋盘格的内角点。这里有一个细节我们通常使用“内角点”数量。比如一个8x6的棋盘格其内角点就是7x5。找到角点后模块会在内存中构建两个重要的向量一个是“图像角点向量”即每一幅图片上检测到的所有角点的像素坐标另一个是“世界点向量”即这些角点对应的、在棋盘格平面坐标系假设Z0上的三维坐标。这个坐标的单位是“格子”数通常以棋盘格方块的边长作为单位长度例如1.0。准备好所有图片的数据后调用cvCalibrateCamera2函数通过最小化重投影误差迭代求解出相机的内参矩阵3x3的cameraMatrix包含fx, fy, cx, cy和畸变系数通常使用5个参数的k1, k2, p1, p2, k3径向和切向畸变模型。第三阶段双目相机标定模块。在左右相机各自的内参和畸变系数都已标定的基础上这个模块开始工作。它同时读取左右相机在同一时刻对应同一棋盘格姿态拍摄的、已经过文件名配对好的图像对。同样进行角点检测。此时输入除了左右相机各自的图像角点序列和对应的世界点序列外最关键的是要传入左右相机各自已经标定好的内参和畸变系数。然后调用cvStereoCalibrate函数。这个函数的核心任务是计算两个相机之间的相对位置关系即外参。它输出一个旋转矩阵R3x3和一个平移向量T3x1。T向量的模长就是两个相机光心之间的基线距离这是后续三角测距的关键。此外该函数还会输出一些用于后续立体校正的中间矩阵如本质矩阵E和基础矩阵F。最终阶段参数持久化。所有计算出的参数都是内存中的数字必须保存下来。我选择了YAML格式作为配置文件。相比XMLYAML更简洁易读相比JSONYAML能更好地支持OpenCV的FileStorage类进行序列化和反序列化并且能直接存储cv::Mat矩阵。工具集会生成一个结构清晰的YAML文件里面分门别类地存放了cameraMatrix_left、distCoeffs_left、cameraMatrix_right、distCoeffs_right、R、T等所有必要参数。你的后续应用代码只需要用几行OpenCV代码读取这个文件就能恢复出整个双目系统的数学模型。注意这个流程设计隐含了一个重要前提即“先单目后双目”。这是一种经典且稳健的做法。虽然OpenCV的stereoCalibrate也可以同时优化内外参但在相机畸变较大或初始值较差时分开标定能提供更好的初始值往往能得到更稳定、更准确的结果。3. 关键模块详解与实现要点3.1 图像采集模块的稳健性设计图像采集看似简单但要做得稳健适应各种环境需要不少细节处理。我的采集模块主要围绕以下几个要点构建1. 相机初始化与参数设置通过OpenCV的VideoCapture打开设备后第一件事不是立刻开始采集而是设置一些关键的相机参数。对于标定而言最重要的参数是分辨率、曝光时间或增益和帧率。分辨率不宜过低否则角点检测精度下降也不宜过高以免处理速度过慢。通常1280x720或640x480是常用选择。曝光要设置为固定模式CAP_PROP_AUTO_EXPOSURE设为手动并调整到一个让棋盘格黑白对比清晰、但不过曝或欠曝的值。固定曝光可以避免连续采集时因自动曝光导致的图像亮度闪烁从而影响角点检测的稳定性。帧率可以设低一些比如2-5 fps给角点检测和存储留出时间。// 伪代码示例相机初始化设置 CvCapture* capture cvCreateCameraCapture(device_id); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 1280); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 720); cvSetCaptureProperty(capture, CV_CAP_PROP_AUTO_EXPOSURE, 0); // 关闭自动曝光 cvSetCaptureProperty(capture, CV_CAP_PROP_EXPOSURE, desired_exposure_value); cvSetCaptureProperty(capture, CV_CAP_PROP_FPS, 5);2. 棋盘格检测与实时反馈采集不是盲目地拍一堆照片而是每拍一张程序都会立即尝试在当前帧中查找棋盘格角点。这是通过cvFindChessboardCorners函数实现的。如果找到了程序会用cvDrawChessboardCorners函数将角点连接线画在图像上显示出来给操作者一个明确的“成功”视觉反馈。同时为了提高角点检测的精度在找到粗略角点后通常会调用cvFindCornerSubPix函数进行亚像素级精化这能显著提升后续标定的精度。只有检测成功的帧才会被保存。我通常会设计两个触发模式手动模式按空格键保存当前成功检测的帧和自动模式每隔N秒自动保存一次成功检测的帧。自动模式适合棋盘格固定、相机移动的场景手动模式则更灵活适合移动棋盘格、相机固定的场景。3. 双目同步与文件配对对于双目采集最大的挑战是同步。理想情况是使用硬件触发确保左右相机完全同步曝光。在没有硬件触发的条件下我的工具集采用了一种“软件近似同步”策略同时打开左右两个相机流在一个极短的时间窗口内如一帧时间内连续抓取左右图像并将这一对图像视为同一时刻的。在保存时采用严格的配对命名例如pair_001_left.jpg和pair_001_right.jpg。这要求左右相机的帧率设置一致并且计算机有足够的处理能力快速抓取两路视频流。在采集界面中我会并排显示左右相机的实时画面并分别用不同颜色的框标出检测到的棋盘格方便用户确认双目的视野和姿态是否都合适。3.2 单目标定模块的精度提升技巧单目标定的精度直接决定了整个双目系统的基础。除了采集高质量的图像外在计算环节也有几个关键点需要注意。1. 角点检测的鲁棒性处理cvFindChessboardCorners函数有时会失败尤其是在棋盘格部分被遮挡、光照不均或透视变形过大时。在标定模块中我并不是简单跳过失败的图片而是实现了一个“多尺度检测”的回退机制。首先以原始图像进行检测如果失败尝试对图像进行一次高斯金字塔下采样缩小在更粗的尺度上检测因为缩小图像有时能平滑噪声让角点模式更明显。如果还不行再尝试调整cvFindChessboardCorners的flags参数例如尝试CV_CALIB_CB_ADAPTIVE_THRESH使用自适应阈值结合CV_CALIB_CB_NORMALIZE_IMAGE归一化图像亮度。只有所有尝试都失败后才会丢弃该图片并在日志中记录方便用户分析原因比如是不是棋盘格折了或者反光太严重。2. 标定参数的选择与理解调用cvCalibrateCamera2时有几个参数直接影响结果flags: 这是一个重要的位掩码。常用的组合是CV_CALIB_FIX_PRINCIPAL_POINT固定主点或CV_CALIB_FIX_ASPECT_RATIO固定焦距比例fx/fy。对于大多数现代数码相机和工业相机其像素是正方形的理论上fx和fy应该相等。使用CV_CALIB_FIX_ASPECT_RATIO并将比例设为1可以增加优化的约束在图片数量较少或角度覆盖不全时能获得更稳定的解。但如果你使用的相机像素不是正方形某些老式CCD就不能用这个标志。criteria: 优化迭代的终止条件。通常设置为最大迭代次数如30和误差变化阈值如1e-6。这个需要设置合理迭代次数太少可能没收敛太多又浪费时间。我一般设maxCount30epsilon1e-6。3. 重投影误差分析标定函数会返回一个重要的指标平均重投影误差。这个值以像素为单位表示的是将标定出的相机参数反投影回去计算出的角点像素位置与实际检测到的角点像素位置之间的平均距离。这个值越小说明标定越精确。通常误差在0.1到0.5像素之间是可以接受的优秀结果如果超过1个像素就需要检查采集的图像质量、棋盘格是否平整、角点检测是否准确了。我的工具集会为每一幅参与标定的图片计算其单独的重投影误差并输出报告。如果某几张图片的误差显著高于平均值它们可能就是“害群之马”可以考虑将其从标定集中移除重新计算往往能提升整体精度。3.3 双目外参标定与立体校正准备双目标定模块是连接两个独立相机的桥梁。它的输入是两套已经标定好的内参和一系列同步的图像对。1. 外参标定的核心cvStereoCalibrate函数在内部做的事情本质上是求解一个“手眼标定”问题。它通过多组棋盘格在不同姿态下左右相机看到的角点对应关系来求解两个相机坐标系之间的旋转和平移。这里有一个关键概念极线约束。标定出的基础矩阵F就编码了这种约束。一个正确的标定结果应该能使左右图像中对应的角点尽可能满足极线约束。2. 标定质量评估除了函数返回的总体重投影误差评估双目标定质量还有一个更直观的方法极线误差。我们可以随机选取一些未参与标定的图像对测试集利用标定出的F矩阵计算左图角点在右图对应的极线然后测量右图实际检测到的对应角点到这条极线的距离以像素为单位。这个距离的平均值就是极线误差。一个优良的双目标定其极线误差通常也应该在亚像素级别。我的工具集在完成标定后会提供一个可选的功能用测试集计算并显示这个极线误差作为标定结果的交叉验证。3. 生成立体校正映射表得到内外参后我们通常不会直接使用原始的R和T进行立体匹配而是先进行立体校正。立体校正的目的是将左右图像“对齐”使得对应的极线变成水平线这样搜索匹配点时只需要在同一行进行极大简化了算法。OpenCV提供了cvStereoRectify函数来计算校正旋转矩阵R1、R2和投影矩阵P1、P2以及视差映射到深度的矩阵Q。更进一步cvInitUndistortRectifyMap函数可以根据这些参数预先计算出从原始畸变图像到校正后图像的像素映射关系mapx和mapy。这个计算过程比较耗时但一旦算出对于同一套相机就是固定的。因此我的工具集在标定最后会主动计算并保存这些校正映射表mapx_left,mapy_left,mapx_right,mapy_right到YAML文件。这样在你的主程序中只需要在初始化时用cvRemap函数加载这些映射表就能以极低的开销实时完成图像校正无需每次重复计算。4. 工具集的编译、配置与使用全流程4.1 环境准备与项目编译这个工具集是纯C语言配合OpenCV C接口写的所以对编译环境的要求比较明确。你需要一个C编译器如GCC或MSVC和OpenCV库。1. 安装OpenCV这是最基础的一步。建议从OpenCV官网下载源代码进行编译安装这样可以确保开启所有需要的模块特别是calib3d和highgui。在Linux上过程大致如下# 安装依赖 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev # 下载OpenCV源码以4.x版本为例 git clone https://github.com/opencv/opencv.git cd opencv mkdir build cd build # 配置CMake建议安装到/usr/local cmake -D CMAKE_BUILD_TYPERELEASE -D CMAKE_INSTALL_PREFIX/usr/local -D WITH_GTKON -D WITH_FFMPEGON .. # 编译并安装 make -j$(nproc) sudo make install在Windows上可以使用CMake-GUI配置然后用Visual Studio打开生成的解决方案进行编译。关键是要记住安装后OpenCV的路径以及bin目录包含DLL文件需要被添加到系统的PATH环境变量中。2. 编译工具集工具集通常提供一个简单的CMakeLists.txt文件。你只需要在项目根目录下执行mkdir build cd build cmake .. make如果一切顺利会在build目录下生成可执行文件例如mono_calib单目标定、stereo_calib双目标定和capture图像采集。实操心得在Linux下编译OpenCV时如果遇到与GTK或HighGUI相关的问题可以尝试在CMake配置中关闭WITH_GTK改用WITH_QT。在Windows下最常见的坑是编译成功后运行时提示缺少opencv_world4xx.dll等动态库务必记得将OpenCV\build\x64\vc15\bin具体路径根据你的VS版本而定添加到系统的PATH变量或者直接将所需的DLL文件拷贝到可执行文件同一目录下。4.2 配置文件与参数说明为了让工具更灵活我设计了一个简单的配置文件比如config.ini或通过命令行参数来设置关键信息。以下是一些核心参数board_width和board_height: 棋盘格内角点的数目比如格子数是9x6则这里是8x5。square_size: 棋盘格一个方块的实际物理尺寸单位是毫米mm。这个值必须精确测量它直接决定了后续三维重建的尺度。用游标卡尺测量多个格子取平均会更准。num_images_to_capture: 采集图像的数量。一般建议15-25张覆盖相机视野的不同位置和角度特别是边缘和四个角。calibration_flags: 标定算法的标志位组合对应OpenCV的CV_CALIB_*常量。output_filename: 最终输出的YAML文件名。一个典型的命令行启动采集可能像这样./capture --left 0 --right 1 --width 8 --height 5 --size 24.5 --num 20 --output ./calib_imgs/这条命令表示从设备0左相机和设备1右相机同步采集棋盘格内角点为8x5每个格子实际边长24.5毫米总共采集20对有效图像保存到./calib_imgs/目录。4.3 标准操作流程SOP指南为了获得最好的标定结果遵循一个标准的操作流程至关重要。以下是我总结的步骤第一步准备棋盘格标定板。这是最重要的物理设备。建议使用高精度打印的棋盘格并将其粘贴在平整、坚硬的底板如亚克力板、铝板上确保使用时不会弯曲变形。棋盘格方块最好是哑光材质避免反光。第二步采集图像。固定好双目相机确保左右相机相对位置在采集过程中绝对不变。运行采集程序调整相机曝光使棋盘格黑白分明但不要过曝白色区域一片死白。手持或移动棋盘格标定板使其出现在相机视野的各个位置中心、四个边缘、四个角落。同时变化棋盘格的姿态倾斜、旋转、远近。目标是让棋盘格充满整个图像并且姿态尽可能多样化这能为标定算法提供更丰富的约束信息。确保左右相机都能同时、清晰地看到完整的棋盘格。采集足够数量如20-30对的图像。程序会实时显示检测结果确保每一张保存的图像都成功检测到了角点。第三步单目标定。分别对左右相机采集的图像集运行单目标定程序。./mono_calib --image_dir ./calib_imgs/left/ --board_width 8 --board_height 5 --square_size 24.5 --output left_cam_params.yml ./mono_calib --image_dir ./calib_imgs/right/ --board_width 8 --board_height 5 --square_size 24.5 --output right_cam_params.yml程序会输出内参矩阵、畸变系数和平均重投影误差。仔细检查误差值如果过大1 pixel回顾采集的图像是否有问题。第四步双目标定。运行双目标定程序输入左右相机的图像对目录、各自的标定参数文件以及棋盘格参数。./stereo_calib --left_dir ./calib_imgs/left/ --right_dir ./calib_imgs/right/ --left_param left_cam_params.yml --right_param right_cam_params.yml --board_width 8 --board_height 5 --square_size 24.5 --output stereo_params.yml程序会计算并输出旋转矩阵R、平移向量T、以及左右相机各自的校正映射矩阵。同样关注输出的重投影误差和极线误差。第五步验证标定结果。这是最容易忽略但极其关键的一步。不要直接相信输出的数字要做可视化验证。畸变校正验证使用标定得到的畸变系数对一张原始图像进行校正观察棋盘格的直线是否被拉直。立体校正验证使用生成的校正映射表对一对左右图像进行校正然后并排显示。观察左右图中同一物体的纵坐标是否基本对齐共线这是立体校正是否成功的最直观标志。重投影可视化工具集可以提供一个功能将标定板角点的三维坐标用标定出的参数重新投影到图像上并与检测到的角点对比观察偏差。5. 常见问题排查与实战经验分享即使按照流程操作标定过程中也难免会遇到各种问题。下面是我在多次标定实践中遇到的一些典型问题及其解决方法。5.1 角点检测失败或不稳定现象采集时棋盘格角点经常检测不到或者时有时无。可能原因与解决光照问题这是最常见的原因。反光、阴影、光照不均都会干扰检测。确保棋盘格表面光照均匀、柔和避免直射强光。可以尝试调整相机曝光或增益。对焦模糊相机没有正确对焦在棋盘格上。如果是手动对焦镜头请仔细调焦自动对焦相机可以尝试先让相机对焦在棋盘格上然后锁定对焦如果支持。棋盘格质量问题打印的棋盘格线条不直、有毛边或者底板弯曲。使用更高质量的打印和装裱。姿态过于极端当棋盘格与相机成像平面夹角过大比如超过45度时透视变形严重可能导致检测失败。尽量保证采集的姿态在合理范围内。OpenCV参数尝试调整cvFindChessboardCorners函数的flags例如启用CV_CALIB_CB_ADAPTIVE_THRESH和CV_CALIB_CB_NORMALIZE_IMAGE。5.2 标定结果误差大重投影误差高现象单目或双目标定后平均重投影误差超过1个像素甚至达到好几个像素。可能原因与解决图像数量或质量不足参与标定的有效图像太少如少于10张或者姿态变化不够丰富。增加高质量图像的数量15-25张并确保覆盖视野各个区域。棋盘格物理尺寸不准square_size参数输入错误。用高精度尺子如游标卡尺重新测量棋盘格方块的边长并确保单位是米或毫米与程序内部单位统一。角点检测精度低原始角点检测就不准。确保采集图像清晰并启用了亚像素角点优化cvFindCornerSubPix。相机镜头畸变过大如果使用的是广角或鱼眼镜头使用OpenCV普通的径向切向畸变模型5个参数可能不够用。对于鱼眼镜头需要使用OpenCV的鱼眼镜头模型fisheye模块进行标定。本工具集基于普通镜头模型对于畸变极大的镜头需要调整。存在错误图像某几张图像的角点检测有严重错误比如误检拉高了整体误差。检查标定程序输出的每张图误差报告剔除误差异常高的图像重新标定。5.3 双目校正后图像对齐效果差现象使用标定出的参数进行立体校正后左右图像的同一物体在垂直方向上仍有明显错位。可能原因与解决外参标定不准这是根本原因。重新检查双目标定步骤确保使用的左右图像对是严格同步的并且棋盘格在左右图中都清晰可见、检测成功。可以尝试增加标定图像对的数量和质量。相机在标定后发生移动这是最致命的错误。一旦完成标定双目相机之间的相对位置包括旋转和平移就绝对不能再有任何变化哪怕是非常微小的松动。任何移动都会使标定参数失效。务必确保相机被牢固地固定在同一刚性支架上。图像分辨率不一致确保左右相机采集图像的分辨率完全相同。如果分辨率不同需要先进行缩放或裁剪使其一致。校正映射表计算或应用错误检查cvStereoRectify函数计算的R1R2P1P2矩阵以及cvInitUndistortRectifyMap生成的映射表是否正确保存和加载。在应用cvRemap时确保左右图像使用了各自对应的映射表。5.4 生成的YAML文件无法读取或参数错误现象主程序读取标定文件时出错或读出的参数值明显不合理如焦距为0或极大值。可能原因与解决文件格式或路径错误确保使用OpenCV的FileStorage进行读写并且文件路径正确。YAML文件内容应该是可读的可以用文本编辑器打开检查结构。矩阵维度错误内参矩阵应是3x3畸变系数是1x5或1x4旋转矩阵是3x3平移向量是3x1。检查保存代码确保没有存错维度。数据类型错误OpenCV的FileStorage默认以浮点格式存储。确保在保存和读取时矩阵的数据类型如CV_64FC1是一致的。在C代码中通常使用double精度的矩阵进行标定计算和存储。标定过程本身失败如果标定过程因为某些原因如图片全都没检测到角点而失败但程序仍然写入了文件那么文件中的矩阵可能是未初始化的垃圾值。在保存前应检查标定函数的返回值确保标定成功完成。最后分享一个我个人的深刻体会相机标定是一个“Garbage in, garbage out”垃圾进垃圾出的过程。算法再优秀工具再方便如果输入的图像数据质量不高标定结果也不可能好。因此耐心和细致地完成图像采集步骤是获得高精度标定结果最重要、最不可替代的环节。花半小时精心采集20组高质量图像远比用模糊、反光、姿态单一的100张图像草草了事要有效得多。这个工具集为你自动化了计算和文件处理的繁琐部分但把控制数据质量的“眼睛”和“手”留给了你这才是标定工作真正的核心。本文还有配套的精品资源点击获取
返回列表