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

手把手玩转双目三维重建:从摄像头到点云工厂

双目三维重建系统 (双目标定+立体校正+双目测距+点云显示+多种点云处理算法) Python源码:基于OpenCV的图像处理,Open3D的点云处理,基于深度学习的立体匹配和视差计算方法 代码包含: 1、支持双USB/单USB连接线的双目摄像头 2、支持单目相机标定支持双目相机标定无需 Matlab标定 3、另提供基于Matlab工具箱的标定方法 4、支持使用WLS滤波器对SGBM算法视差图进行滤波,并通过高斯滤波和相机参数得到点云三维坐标 5、提供基于深度学习的立体匹配和视差计算参考实验项目 6、支持双目测距,误差在lcm内(鼠标点击图像即可获得其深度距离),支持Open3D和PCL点云显示 7、提供部分常用的点云处理算法Python例程源码 提供所有文件的执行流程和提示

两枚摄像头组成的立体视觉系统就像人眼,拍张照就能算出物体离你多远。今天咱们用Python+OpenCV+Open3D,自己搭个能测距、能生成点云的实战系统。准备好你的摄像头和键盘,直接开干!

硬件准备:给双目摄像头接上电

市面常见的双目模组分两种:单USB接口(左右目图像合并传输)和双USB独立传输。代码里已经封装了这两种情况的视频流读取方法:

# 单USB设备示例(图像左右拼接) cap = cv2.VideoCapture(0) ret, frame = cap.read() left_img = frame[:, :frame.shape[1]//2] right_img = frame[:, frame.shape[1]//2:] # 双USB设备示例(需提前确认设备索引) cap_left = cv2.VideoCapture(0) cap_right = cv2.VideoCapture(1)

标定:给摄像头做个体检

别急着拍!摄像头出厂都有畸变,得先标定。用棋盘格在镜头前晃悠拍20张图,系统自动计算内参和畸变系数。这里有个偷懒技巧——直接用A4纸打印棋盘格,贴硬纸板上当标定板。

# 自动检测棋盘格角点 ret, corners = cv2.findChessboardCorners(gray_img, (9,6), None) if ret: # 亚像素级角点优化 cv2.cornerSubPix(gray_img, corners, (11,11), (-1,-1), criteria) obj_points.append(objp) img_points.append(corners) # 双目标定核心代码(得到相机矩阵和相对位置) ret, K1, D1, K2, D2, R, T, E, F = cv2.stereoCalibrate( obj_points, img_points_l, img_points_r, K1, D1, K2, D2, (w,h), flags=cv2.CALIB_FIX_INTRINSIC)

立体校正:让画面对齐得像强迫症

双目三维重建系统 (双目标定+立体校正+双目测距+点云显示+多种点云处理算法) Python源码:基于OpenCV的图像处理,Open3D的点云处理,基于深度学习的立体匹配和视差计算方法 代码包含: 1、支持双USB/单USB连接线的双目摄像头 2、支持单目相机标定支持双目相机标定无需 Matlab标定 3、另提供基于Matlab工具箱的标定方法 4、支持使用WLS滤波器对SGBM算法视差图进行滤波,并通过高斯滤波和相机参数得到点云三维坐标 5、提供基于深度学习的立体匹配和视差计算参考实验项目 6、支持双目测距,误差在lcm内(鼠标点击图像即可获得其深度距离),支持Open3D和PCL点云显示 7、提供部分常用的点云处理算法Python例程源码 提供所有文件的执行流程和提示

标定完要做图像校正,让左右图的每一行严格水平对齐。想象给两个摄像头戴上了特制眼镜,画面瞬间整齐划一。

# 计算校正映射表 R1, R2, P1, P2, Q, _, _ = cv2.stereoRectify( K1, D1, K2, D2, (w,h), R, T, alpha=0) mapx1, mapy1 = cv2.initUndistortRectifyMap(K1, D1, R1, P1, (w,h), cv2.CV_32F) mapx2, mapy2 = cv2.initUndistortRectifyMap(K2, D2, R2, P2, (w,h), cv2.CV_32F) # 实时校正演示 left_rect = cv2.remap(left_img, mapx1, mapy1, cv2.INTER_LINEAR) right_rect = cv2.remap(right_img, mapx2, mapy2, cv2.INTER_LINEAR)

深度计算:SGBM算法与WLS滤波的默契配合

SGBM算法算出的视差图像被泼了墨水?上WLS滤波器!这对黄金搭档能让视差图边缘更干净:

# SGBM参数配置(重点调整这几个参数!) window_size = 5 min_disp = 0 num_disp = 64 stereo = cv2.StereoSGBM_create( minDisparity=min_disp, numDisparities=num_disp, blockSize=window_size, P1=8*3*window_size**2, P2=32*3*window_size**2) # WLS滤波 wls_filter = cv2.ximgproc.createDisparityWLSFilter(stereo) disparity = stereo.compute(left_rect, right_rect).astype(np.float32)/16.0 filtered_disp = wls_filter.filter(disparity, left_rect)

点云生成:从二维到三维的魔法时刻

拿到视差图后,结合Q矩阵就能算出三维坐标。Open3D的三行代码可视化让点云显示变得超简单:

# 视差转点云 points = cv2.reprojectImageTo3D(filtered_disp, Q) mask = (filtered_disp > filtered_disp.min()) pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points[mask]) o3d.visualization.draw_geometries([pcd])

实战技巧:

  1. 标定失败?检查棋盘格是否完全进入画面,尝试不同倾斜角度
  2. 视差图出现断层?适当增大numDisparities参数,但别超过摄像头实际视差范围
  3. 点云稀疏?用双边滤波预处理图像,削弱噪声干扰

系统还集成了深度学习立体匹配模型(比如PSMNet),替换传统方法只需修改几行代码。想要测距功能?鼠标点选图像任意位置,控制台直接输出该点距离——实测键盘按键这类小物体误差能控制在1cm以内。

源码包里附赠了点云降采样、法线估计、ICP配准等常用算法,直接运行main.py跟着提示操作就能体验完整流程。遇到坑?记得查文档里的Q&A部分,常见问题都已整理好解决方案。

http://www.jsqmd.com/news/518715/

相关文章:

  • 算法优化的多层缓存映射与访问调度模型的技术7
  • [Java EE 进阶] SpringBoot 配置文件全解析 : properties 与 yml 的使用与实战 (ULTRA)
  • 告别卡顿:FFmpeg多线程硬解码配置详解(以D3D12VA为例)
  • Cursor套壳Kimi败露,最强「自研」模型被锤!创始人:忘记署名了
  • DevSecOps实战 | 如何利用Black Duck实现开源组件安全与合规的左移策略
  • 海南某神秘211校赛 不要再打女神异闻录了!
  • 算法工程中的可扩展性与分布式实现方案的技术7
  • GATK全流程线程数配置保姆级指南:从BWA到MergeVcfs,一文搞定所有核心数设置
  • Prometheus时间同步问题排查指南:从浏览器到服务器的72秒差异修复实战
  • 数组下标为什么从0开始
  • 计算机毕业设计springboot基于的共享单车管理系统 基于Spring Boot的智慧出行单车运营服务平台 基于Spring Boot的无桩共享单车全生命周期管理系统
  • 银河麒麟系统版本溯源:5分钟教你用命令行查清Linux发行版的‘家族背景‘
  • 别再为FPGA程序裸奔发愁了!手把手教你用Quartus和USB Blaster II搞定AES256加密
  • 算法教学中的抽象建模与动态可视化设计的技术7
  • 【GitHub项目推荐--OpenClaw Dashboard:AI 智能体的可视化运维中心】⭐⭐
  • 地磁场导航避坑大全:磁偏角/倾角处理中的5个常见错误
  • # 集美大学课程实验报告-实验2:线性表
  • 计算机毕业设计:Python基于Spark与协同过滤的智能图书推荐平台 Django框架 协同过滤推荐算法 书籍 可视化 数据分析 大数据 大模型(建议收藏)✅
  • FB自动化养号实战:RPA脚本编写与AdsPower应用指南
  • 算法设计中的代价函数优化与约束求解的技术7
  • 【GitHub项目推荐--Page Agent:网页内的 GUI 智能体】⭐⭐⭐
  • 虚拟机锁定文件残留问题全解析:从.lck文件清理到权限修复
  • 基于COMSOL平台,探讨二氧化碳驱替甲烷模型:单场效应下的气体驱替效应研究
  • 【GitHub项目推荐--LobsterBoard:OpenClaw 生态的可视化仪表盘构建器】⭐⭐⭐
  • 告别MDK编译错误:ARM-Compiler V5离线安装包+环境配置全攻略(含历史版本下载)
  • 从《交通时空大数据分析》到实战:用transbigdata和geopandas处理上海地铁数据的完整流程
  • 算法复杂度的符号推导与渐进边界分析的技术7
  • 也许是一些好题 7
  • CCF-A vs 中科院分区:用Python爬虫分析JMLR等20本期刊的‘身份错位‘现象
  • 若依框架菜单权限配置避坑指南:从数据库到前端全流程解析