首页/新闻资讯/正文详情

OpenCV opencv_contrib 中的 Quasi Dense Stereo(准稠密立体匹配)模块实战指南

发布时间:2026/9/25 3:24:52 来源:云帆数科 栏目:资讯中心
OpenCV opencv_contrib 中的 Quasi Dense Stereo(准稠密立体匹配)模块实战指南
计算机视觉图像处理机器学习【免费下载链接】opencv_contrib项目地址https://gitcode.com/gh_mirrors/ope/opencv_contrib点击查看免费下载Quasi Dense Stereo准稠密立体匹配是 opencv_contrib 仓库中stereo模块提供的一种稠密立体匹配方法它先用 Good Features to TrackGFT与金字塔 Lucas-Kanade 光流获得稀疏种子匹配再通过区域生长growing scheme把这些种子逐步传播为稠密对应点最终输出稠密视差图与匹配点集合。本文将围绕 Quasi Dense Stereo 教程入口 及其两篇子教程展开读者读完可以掌握QuasiDenseStereo类的创建与配置、如何对一对立体图像计算稠密对应关系并可视化视差图、如何导出并调优参数模板文件并理解其底层实现原理ZNCC 相关度量、积分图加速、纹理描述符过滤等。方法概述从稀疏种子到稠密传播QuasiDenseStereo是cv::stereo命名空间下实现准稠密立体匹配的类。其核心思想分两步见 类注释稀疏匹配种子获取在左图中用 Shi-Tomasi 角点OpenCV 的goodFeaturesToTrack提取显著特征再以金字塔 Lucas-Kanade 光流calcOpticalFlowPyrLK在右图中跟踪这些特征点得到初始的稀疏对应关系作为传播的种子。稠密传播区域生长对每个种子对在左右图对应的小邻域内计算零均值归一化互相关Zero-mean Normalized Cross-CorrelationZNCC作为匹配质量度量。种子按 ZNCC 值存入优先级队列priority queue算法每次弹出质量最高的匹配在其邻域内检索超过纹理阈值且未被计算过的新对应点形成新匹配并再次入队作为种子直到无法再检索到新匹配为止。该方法是 Stoyanov 等人工作的代码实现引用见头文件cite Stoyanov2010原始区域生长思想源自cite Lhuillier2000。整个传播过程由 quasi_dense_matching 实现 中的主循环完成。核心数据结构与公共 API匹配结构MatchQuasiDense一个基本的匹配结构包含左图点p0、右图点p1以及相关值corr即 ZNCC 值并重载了运算符以便按corr排序见 MatchQuasiDense。参数结构PropagationParameters传播过程所需的全部可调参数分为三类见 PropagationParameters相似度窗口corrWinSizeX、corrWinSizeYZNCC 计算使用的窗口尺寸匹配过滤borderX、borderY忽略的图像边界、correlationThreshold相关阈值、textrureThreshold纹理阈值、neighborhoodSize邻域尺寸、disparityGradient视差梯度阈值Lucas-Kanade 光流参数lkTemplateSize、lkPyrLvl、lkTermParam1、lkTermParam2GFT 特征参数gftQualityThres质量阈值、gftMinSeperationDist最小间隔距离、gftMaxNumFeatures最大特征数。QuasiDenseStereo类方法static PtrQuasiDenseStereo create(cv::Size monoImgSize, cv::String paramFilepath ...)工厂方法第一个参数为单目图像尺寸第二个可选参数为 YAML 配置文件路径缺省时加载默认参数int loadParameters(cv::String filepath)从 YAML 文件加载参数。返回1表示成功加载文件参数0表示路径为空而加载默认参数-1表示文件无效并回退默认参数见 loadParametersint saveParameters(cv::String filepath)把当前参数写入 YAML 文件不传参数时默认写入根目录下名为qds_parameters.yaml的文件可用于生成调参模板void process(const cv::Mat imgLeft, const cv::Mat imgRight)主流程内部先转灰度再依次调用稀疏匹配与稠密匹配彩色输入按 BGR 假设转换void getSparseMatches(...)/void getDenseMatches(...)分别取出稀疏与稠密对应点向量返回的匹配元素不使用corr成员cv::Point2f getMatch(int x, int y)给定左图像素坐标返回右图对应位置无匹配时返回Point(0,0)NO_MATCH。必须在process()之后调用cv::Mat getDisparity()基于process()得到的对应关系计算并返回视差图灰度默认量化等级 50。实战一对立体图像对计算稠密对应与视差图对应教程为 qds_quasi_dense_stereo.markdown完整示例代码见 dense_disparity.cpp。1. 加载立体图像对程序先加载左右两幅图像彩色模式读取cv::Mat rightImg, leftImg; leftImg imread(./imgLeft.png, IMREAD_COLOR); rightImg imread(./imgRight.png, IMREAD_COLOR);2. 创建QuasiDenseStereo对象需要单张图像的尺寸来构造对象。不指定第二个参数对象将加载默认参数cv::Size frameSize leftImg.size(); Ptrstereo::QuasiDenseStereo stereo stereo::QuasiDenseStereo::create(frameSize);3. 执行主流程把左右图传入process方法完成稀疏种子计算与稠密传播stereo-process(leftImg, rightImg);4. 获取并显示视差图process()之后即可取视差图并显示cv::Mat disp; disp stereo-getDisparity(); cv::namedWindow(disparity map); cv::imshow(disparity map, disp);示例中还同时显示左右通道原图并等待按键cv::waitKey(0)。5. 导出稠密对应点通过getDenseMatches()取出全部稠密匹配并写入文本文件每一行输出左图点与右图点坐标vectorstereo::MatchQuasiDense matches; stereo-getDenseMatches(matches); std::ofstream dense(./dense.txt, std::ios::out); for (uint i0; i matches.size(); i) { dense matches[i].p0 matches[i].p1 endl; } dense.close();实战二导出参数模板文件对应教程为 qds_export_parameters.markdown完整示例见 export_param_file.cpp。QuasiDenseStereo支持通过loadParameters()从 YAML 文件加载配置便于在视频处理等场景中动态微调参数。先用以下代码生成一份参数模板Ptrstereo::QuasiDenseStereo stereo stereo::QuasiDenseStereo::create(cv::Size(5,5));std::string parameterFileLocation ./parameters.yaml; if (argc 1) parameterFileLocation argv[1]; stereo-saveParameters(parameterFileLocation);运行后可把parameters.yaml模板作为起点编辑其中的阈值后通过loadParameters()加载。参数详解与默认值源码级下表整理了loadParameters在无配置文件时设定的全部默认参数来源quasi_dense_stereo.cpp以及它们在源码中的用途参数默认值作用borderX/borderY15 / 15忽略的图像边界宽度种子与候选匹配靠近边界会被丢弃CheckBordercorrWinSizeX/corrWinSizeY5 / 5ZNCC 计算窗口尺寸correlationThreshold0.5ZNCC 相关阈值低于该值的候选匹配被丢弃textrureThreshold200纹理描述符阈值用于过滤平坦/无纹理区域neighborhoodSize5种子周围待搜索的邻域半径实际为2*N1的方形区域disparityGradient1候选匹配在右图的视差梯度搜索范围lkTemplateSize3Lucas-Kanade 模板尺寸lkPyrLvl3金字塔层数lkTermParam13LK 迭代终止条件MAX_ITERlkTermParam20.003LK 迭代终止条件EPSgftQualityThres0.01GFT 质量阈值gftMinSeperationDist10GFT 特征最小间隔距离gftMaxNumFeatures500GFT 最大特征数量调参要点correlationThreshold控制匹配严格程度越大匹配越少但更可靠neighborhoodSize与disparityGradient决定传播的搜索范围直接影响稠密程度与计算量gftMaxNumFeatures决定初始种子数量影响最终覆盖率。源码级原理深入稀疏匹配GFT 金字塔 LK在 sparseMatching 中先以gftMaxNumFeatures、gftQualityThres、gftMinSeperationDist为参数调用goodFeaturesToTrack提取左图特征再以lkTemplateSize、lkPyrLvl及TermCriteria(MAX_ITER|EPS, lkTermParam1, lkTermParam2)调用calcOpticalFlowPyrLK在右图跟踪跟踪失败featureStatus[i]0的特征会被剔除保证左右特征向量一一对应。稠密传播优先级队列 ZNCC 积分图process()内部先把输入转为灰度再调用sparseMatching与 quasiDenseMatching。传播阶段的关键环节纹理描述符buildTextureDescriptor为每个像素计算其与上下左右四邻域的绝对灰度差最大值作为纹理描述符超过textrureThreshold的像素边缘/强纹理处不参与匹配避免错误传播积分图加速cv::integral同时生成灰度积分图与灰度平方积分图sum0/ssum0、sum1/ssum1使任意尺寸窗口的和与平方和都能在常数时间内取得patchSumSum2ZNCC 计算因此与窗口大小无关种子队列extractSparseSeeds对每个稀疏匹配计算 ZNCC超过correlationThreshold的才入种子队列并登记到refMap/mtcMap传播主循环每次弹出 ZNCC 最高的种子在左图2*neighborhoodSize1邻域内、右图2*disparityGradient1视差范围内搜索候选候选通过iZNCC_c1计算相关值超过阈值后先入局部队列再从局部队列按质量降序弹出只有当左右图均未登记该点时唯一性约束才注册为正式匹配并重新入种子队列直至队列为空。视差计算computeDisparity遍历整幅左图对每个有匹配的像素计算其与右图对应点的欧氏距离sqrt(dx*dxdy*dy)作为视差值无匹配像素置为NAN见 computeDisparity。使用前提与注意事项该模块属于 opencv_contrib需要以opencv_contrib方式构建 OpenCV 后通过#include opencv2/stereo.hpp使用示例中同时依赖opencv2/highgui.hpp用于显示输入图像尺寸需一致create时的monoImgSize应取单张图像尺寸getMatch、getDisparity、getDenseMatches必须在process()之后调用否则结果不正确彩色输入会被按 BGR 假设转为灰度处理无匹配的像素在视差图中为NAN导出匹配点时会自动跳过。进一步可参考仓库内其余资料stereo 模块教程目录、stereo 模块 CMake 配置 以及 Python 示例以便在不同语言与构建环境下快速上手。赞分享计算机视觉图像处理机器学习【免费下载链接】opencv_contrib项目地址https://gitcode.com/gh_mirrors/ope/opencv_contrib点击查看免费下载相关推荐OpenCV xstereo 模块 Quasi Dense Stereo 准稠密立体匹配实战指南OpenCV xstereo 模块 Quasi Dense Stereo 准稠密立体匹配实战指南 Quasi Dense Stereo准稠密立体匹配是 Op计算机视觉图像处理深度学习机器学习Aster高级技巧如何优化模型性能提升50%识别速度Aster高级技巧如何优化模型性能提升50%识别速度 Aster是一款专注于自然图像中裁剪文本识别的开源工具通过合理的优化策略可以显著提升其模型性能和识别计算机视觉图像处理机器学习OpenCV xstereo 模块 Quasi Dense Stereo 准稠密立体匹配从配置、运行到原理剖析OpenCV xstereo 模块 Quasi Dense Stereo 准稠密立体匹配从配置、运行到原理剖析 本指南围绕 opencv_contrib 仓库计算机视觉图像处理深度学习机器学习上一篇android-audio-visualizer扩展开发自定义可视化效果的完整指南下一篇深入探索GoMock轻松掌握mockgen的类型解析与反射机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

第一次交Python作业?从环境配置到提交的零基础避坑指南
第一次交Python作业?从环境配置到提交的零基础避坑指南

第一次交Python作业,很多人不是被题目难住的,而是被“我明明照着教程写的,它就是不运行”这件事逼疯的。我见过太多新手的屏幕了:终端里飘着红色报错,窗口一闪而过,代码里缩进乱作一团,老师走过… · 2026/9/25 3:24:52

goidentity.v3 身份接口库解析:Sliver 项目中的认证身份与授权属性设计
goidentity.v3 身份接口库解析:Sliver 项目中的认证身份与授权属性设计

网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 导读 goidentity.v3 是 gokrb5(Kerberos 5 协议的 Go 实现)生态中一个精炼的通用身份抽象包&… · 2026/9/25 3:24:52

PyTorch 2 Export 量化实战:借助 OpenVINOQuantizer 为 OpenVINO torch.compile 后端生成低精度模型
PyTorch 2 Export 量化实战:借助 OpenVINOQuantizer 为 OpenVINO torch.compile 后端生成低精度模型

示例工程 【免费下载链接】tutorials PyTorch tutorials. 项目地址: https://gitcode.com/gh_mirrors/tuto/tutorials 点击查看 免费下载 本篇技术指南完整讲解如何在 PyTorch 2 Export 量化流程中,使用 Neural Network Compression Framework&#xff… · 2026/9/25 3:24:52

Ventoy多重启动U盘制作:NTFS支持与Secure Boot兼容实战
Ventoy多重启动U盘制作:NTFS支持与Secure Boot兼容实战

简介:Ventoy 1.1.11 Windows版是一款面向系统运维人员、IT支持工程师及装机爱好者的开源U盘启动盘制作工具,彻底解决传统方式需反复格式化U盘、逐个制作启动盘的低效问题。用户仅需将多个ISO镜像(如微PE、大白菜、Ubuntu、CentOS、Windows Se… · 2026/9/25 3:58:30

cube-ui Textarea 多行输入框组件详解:双向绑定、折叠展开与字数计数全配置
cube-ui Textarea 多行输入框组件详解:双向绑定、折叠展开与字数计数全配置

前端UI组件移动开发 【免费下载链接】cube-ui :large_orange_diamond: A fantastic mobile ui lib implement by Vue 项目地址: https://gitcode.com/gh_mirrors/cu/cube-ui 点击查看 免费下载 导读 本文以 cube-ui(一个基于 Vue 构建的移动端 UI 组件… · 2026/9/25 3:58:30

ENSP AR启动Error 40根因与修复:OSType错配导致input[18]校验失败
ENSP AR启动Error 40根因与修复:OSType错配导致input[18]校验失败

简介:本资源是一份针对华为ENSP模拟器中AR设备虚拟机无法启动问题的专项排错指南,面向网络工程初学者、HCIA备考人员及实验环境搭建受阻的实践者。文档聚焦于40错误代码这一典型故障,在常规卸载重装、检查虚拟网卡、验证IP配置等方法均失效后… · 2026/9/25 3:58:30

NACHOS操作系统课设全攻略:从环境搭建到系统调用调试
NACHOS操作系统课设全攻略:从环境搭建到系统调用调试

简介:山东大学2020级操作系统课程设计成果,基于NACHOS-3.4-UALR-2022教学内核完成,面向计算机专业本科生及系统编程学习者。项目使用C语言实现,覆盖进程管理、线程调度、内存管理、文件系统与同步机制等核心模块,通过修… · 2026/9/25 3:58:30

微信小程序电商纠纷处理机制设计与实现:从规则到代码
微信小程序电商纠纷处理机制设计与实现:从规则到代码

简介:这份文档面向微信小程序电商平台的运营、客服与法务合规人员,提供一套完整的用户交易纠纷处理机制模板,可直接用于平台规则搭建或内部制度参考。资源包共1个docx文件,约11KB,内容为可编辑的Word文档,便… · 2026/9/25 3:58:29

Metadata as Code 分阶段交付计划:kcmd 从只读快照到双向同步的落地路线图
Metadata as Code 分阶段交付计划:kcmd 从只读快照到双向同步的落地路线图

数据目录AI Agent人工智能知识管理示例工程 【免费下载链接】knowledge-catalog Google Cloud Knowledge Catalog Tools and Samples 项目地址: https://gitcode.com/gh_mirrors/kn/knowledge-catalog 点击查看 免费下载 导读 分阶段交付计划 是 toolbox/mdcode&a… · 2026/9/25 3:58:23

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码