SGM算法OpenCV SGBM实战:Python 3.11环境5步生成稠密视差图

发布时间:2026/7/9 20:30:07

SGM算法OpenCV SGBM实战:Python 3.11环境5步生成稠密视差图
SGM算法OpenCV SGBM实战Python 3.11环境5步生成稠密视差图双目立体视觉技术正逐渐成为计算机视觉领域的重要工具而SGMSemi-Global Matching算法作为其中的核心匹配方法在OpenCV中以SGBMSemi-Global Block Matching的形式实现。本文将带你从零开始在Python 3.11环境下通过五个关键步骤实现稠密视差图的生成。1. 环境准备与图像采集在开始之前我们需要确保开发环境配置正确。Python 3.11提供了更好的性能优化和内存管理这对处理高分辨率图像尤为重要。import cv2 import numpy as np import matplotlib.pyplot as plt # 验证OpenCV版本 print(OpenCV版本:, cv2.__version__)双目视觉系统需要一对经过严格校准的相机拍摄的图像。校准过程包括相机内参矩阵焦距、主点坐标畸变系数径向和切向畸变相机间的旋转和平移关系外参提示在校准过程中建议使用至少15张不同角度的棋盘格图像以确保校准精度。采集到的左右图像需要进行预处理以提高匹配质量def preprocess_image(img): # 高斯模糊降噪 img cv2.GaussianBlur(img, (3, 3), 0) # 直方图均衡化增强对比度 if len(img.shape) 2: # 灰度图 img cv2.equalizeHist(img) else: # 彩色图 img cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) img[:,:,0] cv2.equalizeHist(img[:,:,0]) img cv2.cvtColor(img, cv2.COLOR_YCrCb2BGR) return img2. SGBM参数配置详解OpenCV中的StereoSGBM类提供了丰富的参数配置选项理解每个参数的作用对获得优质视差图至关重要。参数说明推荐值minDisparity最小视差0numDisparities视差搜索范围必须是16的倍数64-256blockSize匹配块大小奇数3-11P1控制视差平滑度的参数18通道数blockSize²P2控制视差平滑度的参数232通道数blockSize²disp12MaxDiff左右视差检查最大差异10preFilterCap预处理滤波器的截断值31uniquenessRatio唯一性检测比率5-15speckleWindowSize斑点滤波窗口大小100-200speckleRange斑点滤波范围1-2mode算法模式SGBM或HHcv2.STEREO_SGBM_MODE_SGBMdef create_sgbm_matcher(min_disp0, num_disp160, block_size5): # 基础参数设置 matcher cv2.StereoSGBM_create( minDisparitymin_disp, numDisparitiesnum_disp, blockSizeblock_size, P18 * 3 * block_size ** 2, P232 * 3 * block_size ** 2, disp12MaxDiff1, uniquenessRatio10, speckleWindowSize100, speckleRange32, modecv2.STEREO_SGBM_MODE_SGBM_3WAY ) return matcher3. 视差计算与后处理获得原始视差图后通常需要进行一系列后处理操作以提高质量def compute_disparity(left_img, right_img, matcher): # 计算原始视差 disp matcher.compute(left_img, right_img).astype(np.float32) / 16.0 # 视差归一化用于显示 disp_vis (disp - min_disp) / num_disp disp_vis (disp_vis * 255).astype(np.uint8) # 中值滤波去噪 disp_filtered cv2.medianBlur(disp, 3) # 空洞填充可选 disp_filled fill_holes(disp_filtered) return disp, disp_filtered, disp_filled def fill_holes(disp): 使用形态学操作填充视差图中的空洞 kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) disp cv2.morphologyEx(disp, cv2.MORPH_CLOSE, kernel) return disp4. 视差图优化技巧原始视差图往往存在噪声和错误匹配以下是一些实用的优化方法左右一致性检查通过比较左右视差图来检测和修正不一致的匹配亚像素优化通过二次曲线拟合提高视差精度视差图滤波使用加权中值滤波或双边滤波平滑视差图小区域抑制去除孤立的噪声区域def postprocess_disparity(disp_left, disp_rightNone): # 左右一致性检查如果有右视差图 if disp_right is not None: mask np.abs(disp_left - disp_right) 1 disp_left[mask] -1 # 标记为无效 # 亚像素优化 disp_refined cv2.ximgproc.disparityRefinement( disp_left, left_img, modecv2.ximgproc.RF_WEIGHTED_LEAST_SQUARES ) # 加权中值滤波 disp_filtered cv2.ximgproc.weightedMedianFilter( left_img.astype(np.uint8), disp_refined.astype(np.float32), 7, # 滤波半径 sigma1.5 ) return disp_filtered5. 三维重建与应用获得精确的视差图后可以将其转换为深度图并进行三维重建def disparity_to_depth(disp, Q): 将视差图转换为深度图 depth np.zeros(disp.shape, dtypenp.float32) cv2.reprojectImageTo3D(disp, depth, Q, handleMissingValuesTrue) depth depth[:,:,2] # 只取Z坐标深度 return depth def visualize_3d(depth, left_img, scale1.0): 使用Matplotlib可视化3D点云 h, w depth.shape y, x np.mgrid[0:h:scale, 0:w:scale] fig plt.figure(figsize(10, 10)) ax fig.add_subplot(111, projection3d) mask depth 0 ax.scatter( x[mask], y[mask], depth[mask], cleft_img[::scale,::scale][mask], s1, alpha0.5 ) ax.set_xlabel(X) ax.set_ylabel(Y) ax.set_zlabel(Depth) plt.show()在实际应用中SGBM算法可以用于自动驾驶中的障碍物检测工业检测中的三维尺寸测量机器人导航中的环境建模VR/AR中的场景重建通过调整参数和优化流程我们可以在不同场景下获得满足需求的视差图。例如在室内场景中由于纹理丰富可以使用较小的blockSize3-5和较大的numDisparities128-256而在室外远距离场景中可能需要更大的blockSize7-11和较小的numDisparities64-128以提高匹配稳定性。

相关新闻

OpenFace实战指南:开源面部行为分析解决方案深度解析

OpenFace实战指南:开源面部行为分析解决方案深度解析

2026/7/9 16:16:42

OpenFace实战指南:开源面部行为分析解决方案深度解析 【免费下载链接】OpenFace OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation. 项目地址: htt…

K老答——父子论道

K老答——父子论道

2026/7/7 19:26:59

K老是谁?K老,名K老。问:前段时间我儿子跟我打电话,聊到了一些哲学问题。他是学理工科的,坚定地认为世界是物质的,是个唯物主义者。我呢,因为接触佛学比较多,但我没反驳他。我想着暑假…

openEuler/QoS-Deployment-Test:企业级混部场景测试最佳实践

openEuler/QoS-Deployment-Test:企业级混部场景测试最佳实践

2026/7/7 19:26:59

openEuler/QoS-Deployment-Test:企业级混部场景测试最佳实践 【免费下载链接】QoS-Deployment-Test Docker-based openEuler Online-Offline Co-scheduling Test Suite. 项目地址: https://gitcode.com/openeuler/QoS-Deployment-Test 前往项目官网免费下载&…

Android应用自动化脱壳实战:Skill工具链原理与深度应用解析

Android应用自动化脱壳实战:Skill工具链原理与深度应用解析

2026/7/9 20:20:33

1. 项目概述:告别繁琐,拥抱自动化脱壳在移动应用安全测试和逆向分析领域,Android应用的“脱壳”一直是个绕不开的技术活。所谓“壳”,指的是开发者为了保护核心代码(尤其是DEX文件)不被轻易反编译和分析&am…

Tesseract 5.5.2 与 PaddleOCR 3.0 对比评测:10张票据识别准确率与速度实测

Tesseract 5.5.2 与 PaddleOCR 3.0 对比评测:10张票据识别准确率与速度实测

2026/7/9 20:20:33

Tesseract 5.5.2 与 PaddleOCR 3.0 对比评测:10张票据识别准确率与速度实测1. 评测背景与实验设计在当今数字化办公场景中,光学字符识别(OCR)技术已成为处理纸质文档的关键工具。本次评测聚焦两款主流开源OCR引擎——拥有30年历史…

macOS 15 Sequoia 开发者视角:从 UNIX 03 认证到 Apple Silicon 的 3 个底层架构演进

macOS 15 Sequoia 开发者视角:从 UNIX 03 认证到 Apple Silicon 的 3 个底层架构演进

2026/7/9 20:20:33

macOS 15 Sequoia 开发者视角:从 UNIX 03 认证到 Apple Silicon 的 3 个底层架构演进当我们在终端输入uname -a时,那个熟悉的"Darwin"字样背后隐藏着一段长达二十余年的技术进化史。作为目前唯一通过UNIX 03认证的消费级操作系统,m…

ArkUI-X 1.0.0 与 5.0.5/6.0.2 版本对比:3大核心能力演进与升级决策

ArkUI-X 1.0.0 与 5.0.5/6.0.2 版本对比:3大核心能力演进与升级决策

2026/7/9 20:20:33

ArkUI-X 1.0.0 与 5.0.5/6.0.2 版本对比:3大核心能力演进与升级决策跨平台开发框架的每一次迭代都牵动着技术决策者的神经。当我们在2026年回望ArkUI-X的发展轨迹,从1.0.0 Release到6.0.2 Release的演进,不仅是一部技术升级史,更折…

ncmdumpGUI:3分钟解锁你的网易云音乐NCM文件自由

ncmdumpGUI:3分钟解锁你的网易云音乐NCM文件自由

2026/7/9 20:20:33

ncmdumpGUI:3分钟解锁你的网易云音乐NCM文件自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式文件无法在其他设备…

删除数据的2种写法

删除数据的2种写法

2026/7/9 20:10:32

这两段代码(异步刷新 和 非刷新/普通回调)本质上都是在做同一件事:调用接口删除数据。 它们的核心区别不在于“能不能用”,而在于**“代码的书写范式”和“对执行流程的控制能力”。它们对前端框架和技术栈的要求其实非常低**。 为…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

平价正宗重庆火锅实测|理性避坑选型指南

平价正宗重庆火锅实测|理性避坑选型指南

2026/7/9 0:09:12

一、引言:重庆火锅消费现存痛点当下大众平价川渝火锅赛道竞争白热化,普通消费者就餐普遍面临三大选型难题:一是口味同质化严重,大量门店采用预制锅底、半成品食材,打着重庆老火锅旗号弱化牛油本味,麻辣口感…

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

2026/7/9 0:09:12

AcFunDown:打破A站视频离线观看壁垒的终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 想象一下这样的场景…

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

2026/7/9 0:09:12

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…