双目三维重建系统 (双目标定立体校正双目测距点云显示多种点云处理算法) Python源码基于OpenCV的图像处理Open3D的点云处理基于深度学习的立体匹配和视差计算方法 代码包含: 1、支持双USB/单USB连接线的双目摄像头 2、支持单目相机标定支持双目相机标定无需 Matlab标定 3、另提供基于Matlab工具箱的标定方法 4、支持使用WLS滤波器对SGBM算法视差图进行滤波并通过高斯滤波和相机参数得到点云三维坐标 5、提供基于深度学习的立体匹配和视差计算参考实验项目 6、支持双目测距误差在lcm内(鼠标点击图像即可获得其深度距离)支持Open3D和PCL点云显示 7、提供部分常用的点云处理算法Python例程源码 提供所有文件的执行流程和提示两枚摄像头组成的立体视觉系统就像人眼拍张照就能算出物体离你多远。今天咱们用PythonOpenCVOpen3D自己搭个能测距、能生成点云的实战系统。准备好你的摄像头和键盘直接开干硬件准备给双目摄像头接上电市面常见的双目模组分两种单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), flagscv2.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, alpha0) 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( minDisparitymin_disp, numDisparitiesnum_disp, blockSizewindow_size, P18*3*window_size**2, P232*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])实战技巧标定失败检查棋盘格是否完全进入画面尝试不同倾斜角度视差图出现断层适当增大numDisparities参数但别超过摄像头实际视差范围点云稀疏用双边滤波预处理图像削弱噪声干扰系统还集成了深度学习立体匹配模型比如PSMNet替换传统方法只需修改几行代码。想要测距功能鼠标点选图像任意位置控制台直接输出该点距离——实测键盘按键这类小物体误差能控制在1cm以内。源码包里附赠了点云降采样、法线估计、ICP配准等常用算法直接运行main.py跟着提示操作就能体验完整流程。遇到坑记得查文档里的QA部分常见问题都已整理好解决方案。
手把手玩转双目三维重建:从摄像头到点云工厂
双目三维重建系统 (双目标定立体校正双目测距点云显示多种点云处理算法) Python源码基于OpenCV的图像处理Open3D的点云处理基于深度学习的立体匹配和视差计算方法 代码包含: 1、支持双USB/单USB连接线的双目摄像头 2、支持单目相机标定支持双目相机标定无需 Matlab标定 3、另提供基于Matlab工具箱的标定方法 4、支持使用WLS滤波器对SGBM算法视差图进行滤波并通过高斯滤波和相机参数得到点云三维坐标 5、提供基于深度学习的立体匹配和视差计算参考实验项目 6、支持双目测距误差在lcm内(鼠标点击图像即可获得其深度距离)支持Open3D和PCL点云显示 7、提供部分常用的点云处理算法Python例程源码 提供所有文件的执行流程和提示两枚摄像头组成的立体视觉系统就像人眼拍张照就能算出物体离你多远。今天咱们用PythonOpenCVOpen3D自己搭个能测距、能生成点云的实战系统。准备好你的摄像头和键盘直接开干硬件准备给双目摄像头接上电市面常见的双目模组分两种单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), flagscv2.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, alpha0) 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( minDisparitymin_disp, numDisparitiesnum_disp, blockSizewindow_size, P18*3*window_size**2, P232*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])实战技巧标定失败检查棋盘格是否完全进入画面尝试不同倾斜角度视差图出现断层适当增大numDisparities参数但别超过摄像头实际视差范围点云稀疏用双边滤波预处理图像削弱噪声干扰系统还集成了深度学习立体匹配模型比如PSMNet替换传统方法只需修改几行代码。想要测距功能鼠标点选图像任意位置控制台直接输出该点距离——实测键盘按键这类小物体误差能控制在1cm以内。源码包里附赠了点云降采样、法线估计、ICP配准等常用算法直接运行main.py跟着提示操作就能体验完整流程。遇到坑记得查文档里的QA部分常见问题都已整理好解决方案。