OpenCV格雷码解码教程3D扫描程序运行结果异常排查
OpenCV C++ 格雷码解码程序正确运行指南
正确运行命令
你当前传入的参数存在数值错误,对应官方测试数据集的正确运行命令为:
./main images.yml calibrationParameters.yml 7 5 40 1
参数对应含义按顺序为:
- 格雷码采集图像序列的配置文件路径
- 相机-投影仪联合标定参数文件路径
- 水平方向格雷码编码位数
- 垂直方向格雷码编码位数
- 解码黑白像素差阈值
- 亚像素优化开关(1为开启,0为关闭)
运行前前置校验
- 确认
images.yml内填写的所有图像路径,和你执行二进制文件时的工作目录匹配,避免程序读入空图像导致解码失败 - 确认使用的OpenCV主库、opencv_contrib扩展库版本和测试数据集版本匹配,3.4版本教程代码不要混用4.x版本的测试数据,避免标定参数节点不匹配
- 确认标定文件内的参数节点名和代码中读取的节点名完全一致,不同版本的结构化光模块标定文件节点命名存在差异,参数读错会直接导致点云坐标计算完全错误
需重点检查的代码模块
- 格雷码初始化模块:检查
GrayCodePattern::create()传入的图像宽高参数,必须和实际采集/测试用的格雷码图像分辨率完全一致,分辨率不匹配会导致解码结果完全错位 - 二值化过滤模块:你之前传入的阈值为0,相当于没有过滤阴影、过曝、低对比度区域的无效像素,这是输出点云存在大量杂乱飞点的核心原因,阈值设置为30-50区间对官方测试集适配效果最好
- 点云坐标计算模块:检查视差图转三维坐标时使用的重投影矩阵Q,必须从标定的内外参正确计算生成,不能使用默认空矩阵,否则深度值计算完全失真
- 亚像素优化模块:开启亚像素校正后可以大幅降低格雷码边缘的解码误差,点云平滑度和精度会明显提升,和官方示例输出效果对齐
按上述参数和校验项调整后,输出点云无大面积飞点、扭曲、分层问题,和官方展示的标准效果一致。
内容的提问来源于stack exchange,提问作者Unbroken Developer
相关产品推荐
相关产品推荐

