ORB-SLAM2应用练习:三维重建系统搭建 (3)

想说就说之前在一篇博文中看到博主谈自己第一次写博客的时候,第一个星期热情十分高涨,连发好几篇博文,但随后热情逐渐消退,为了不让自己有种半途而废的罪恶感,接下来的一个月里,仅从别处东拼西凑出两篇水文来安慰自己。没想到我也是走上了这条道路,但我倒好,连凑水文的功夫都懒得用了,一下子一个月零产出,况且还有系列文章没有终结呢。偶然的一天回头来看自己的博客有没有啥动静,让我意想不到的是,居然有人跟我留言和私信
摘要由CSDN通过智能技术生成

想说就说


之前在一篇博文中看到博主谈自己第一次写博客的时候,第一个星期热情十分高涨,连发好几篇博文,但随后热情逐渐消退,为了不让自己有种半途而废的罪恶感,接下来的一个月里,仅从别处东拼西凑出两篇水文来安慰自己。没想到我也是走上了这条道路,但我倒好,连凑水文的功夫都懒得用了,一下子一个月零产出,况且还有系列文章没有终结呢。

偶然的一天回头来看自己的博客有没有啥动静,让我意想不到的是,居然有人跟我留言和私信了,但我由于长期没有维护博客,隔了半一个月都没去回复。读者的数量也比当时多了许多,说不定有人一直等着我的系列文章的下一篇出炉,但却就是迟迟没有更新,突然觉得自己这么做有点不负责任,无论是对我的读者也好,还是对我自己也好。

所以从现在起,我要好好规划自己的时间,将写博客的活动固定下来。在平常的学习中,肯定有不少东西可以拿出来跟大家讨论分享的,我要养成写博客的习惯,既然我选择了这里,我就得坚持到底!

立体匹配算法封装

言归正传。上一篇文章中,我们谈到了相机类的抽象和封装,现在我打算把这个技巧用于立体匹配算法。这样做其实是有好处的,这能使相机程序与立体匹配的算法与该三维重建系统相对独立开来,提供系统选择不同相机和算法的灵活性,与此同时,相机程序和算法也可以变身成一个库,提供给其他的工程使用。目前我把他们都写在同一个工程下(最后将会提供给大家工程代码),但在我的电脑本地,我已经就相机类写成一个单独的库,在各个工程间使用了。

如同相机类一样,我们规定立体匹配算法的统一接口标准,使用一个虚类来完成:

// StereoMatcher.h
#pragma once
#include <opencv2/opencv.hpp>
using cv::Mat;

namespace scs
{
   
    class StereoMatcher
    {
   
    public:
        virtual Mat getDisparityImage(const Mat & leftImage, const Mat & rightImage) = 0;
    };
}

我使用了scs的命名空间,它意为stereo camera system, 这跟后边将要写的系统属于同一个命名空间下的,大家可以根据自己的喜好修改。

如上所示,这是个虚类,提供了一个没有实现的纯虚函数,它的子类必须要复写它。作为示范,我拿opencv自带的两个立体匹配算法作为封装示范:BM和SGBM.

以下是BM类的声明:

// BM.h
#pragma once
#include "StereoMatcher.h"

namespace scs
{
   
    class BM : public StereoMatcher
    {
   
    public:
        Mat getDisparityImage(const Mat & leftImage, const Mat & rightImage) override;
    };
}

它的实现是:

// BM.cpp
#include "BM.h"
using namespace scs;
using namespace cv;

Mat scs::BM::getDisparityImage(const Mat & left, const Mat & right)
{
    int ndisparities = 16 * 5; // range of disparity
    int SADWindowSize &
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值