修改OpenCV SGBM代码实现per

发布时间:2024-12-10 15:13

学习编程逻辑,用代码实现思维导图。 #生活技巧# #学习技巧# #思维导图应用#

最新推荐文章于 2024-09-24 09:00:00 发布

风海流 于 2019-05-30 02:01:19 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文介绍了如何修改OpenCV的StereoSGBM代码以实现像素级搜索范围约束。首先,增加了对per-pixel searching range的描述和MODE标签。接着,新增了函数computeDisparitySGBM_PPSR(),并在SGBM的计算过程中修改了搜索最优匹配的部分。通过简略测试验证了当搜索范围与全局一致时,结果与原版一致。最后,讨论了如何减少编译内容以提高效率,并预告了获取可信per-pixel searching range的后续工作。

摘要由CSDN通过智能技术生成

展开

新增StereoSGBM实现

需要确认我们正在修改的头文件是处于OpenCV的源码路径,而不是OpenCV的安装路径。OpenCV在安装后, 会复制头文件到安装路径,不推荐直接修改安装路径下的文件。

增加per-pixel searching range的描述

在calib3d.hpp定义一个新类, 这个类用于描述disparity的检索index。OpenCV的SGBM的实现要求disparity的数量必须是16的整倍数。所以有一些流程是用来确保这一要求的。

class CV_EXPORTS_W PPSR { public: PPSR(int h, int w, int gdmin, int gdmax) : height(h), width(w), gDMin(gdmin), gDMax(gdmax), gD( gdmax - gdmin + 1 ) { ppsrMin = new int[height * width]; ppsrMax = new int[height * width]; } ~PPSR() { if ( NULL != ppsrMax ) { delete [] ppsrMax; ppsrMax = NULL; } if ( NULL != ppsrMin ) { delete [] ppsrMin; ppsrMin = NULL; } } void copy_pixel_disp_range(const int* fromStart, const int* fromEnd, const int base = 16) { const int n = height * width; int s, e, r; // Start, end, reminder. for ( int i = 0; i < n; ++i ) { s = fromStart[i] - gDMin; r = s % base; ppsrMin[i] = std::max(s - r, 0); e = fromEnd[i] - gDMin; e = std::min( ( e / base + 1 ) * base - 1, gD - 1 ); ppsrMax[i] = e <= 0 ? base : e; } } void initialize_pixel_disp_range(void) { const

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

网址:修改OpenCV SGBM代码实现per https://www.yuejiaxmz.com/news/view/434909

相关内容

python
基于OpenCV和ROS节点的智能家居服务机器人设计流程
【计算机视觉】基于Python—OpenCV的手势识别详解(一)
Python从0到100(七十三):Python OpenCV
python+opencv+mfcc+pygame+arduino多进程=简单的音视频采集分析系统
基于树莓派opencv—Python的人脸面部特征框选(眼睛和微笑)
OpenCV双目相机测距程序
基于opencv,使用python提取视频帧以及提取TVL1光流
基于opencv的家居智能安防机器视觉系统
碎点篇——opencv边缘检测报错

随便看看