目标
本教程将指导您学习如何:
- 配置 QuasiDenseStereo 对象
- 计算密集立体匹配。
#include <fstream>
{
leftImg = imread("./imgLeft.png", IMREAD_COLOR);
rightImg = imread("./imgRight.png", IMREAD_COLOR);
stereo->process(leftImg, rightImg);
disp = stereo->getDisparity();
vector<stereo::MatchQuasiDense> matches;
stereo->getDenseMatches(matches);
std::ofstream dense("./dense.txt", std::ios::out);
for (
uint i=0; i< matches.size(); i++)
{
dense << matches[i].p0 << matches[i].p1 << endl;
}
dense.close();
return 0;
}
MatSize size
定义 mat.hpp:2177
用于指定图像或矩形大小的模板类。
定义 types.hpp:335
std::shared_ptr< _Tp > Ptr
定义 cvstd_wrapper.hpp:23
uint32_t uint
定义 interface.h:42
void imshow(const String &winname, InputArray mat)
在指定的窗口中显示图像。
int waitKey(int delay=0)
等待按键按下。
void namedWindow(const String &winname, int flags=WINDOW_AUTOSIZE)
创建窗口。
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
解释
程序加载一对立体图像。
导入图像后:
leftImg =
imread(
"./imgLeft.png", IMREAD_COLOR);
rightImg =
imread(
"./imgRight.png", IMREAD_COLOR);
我们需要知道单个图像的帧大小,以便创建一个 QuasiDenseStereo
对象的实例。
因为我们在构造函数中没有指定第二个参数,所以 QuasiDenseStereo
对象将加载默认参数。
然后我们可以像这样在 process 方法中传递导入的立体图像
stereo->process(leftImg, rightImg);
process 方法包含该类的大部分功能,主要执行两项操作。
- 基于“良好的特征点跟踪”和“金字塔卢卡斯-卡纳德”光流算法计算稀疏立体匹配。
- 基于这些稀疏立体点,使用准密集立体匹配方法对立体匹配进行稠密化。
执行 process()
后,我们可以显示立体匹配的视差图像。
disp =
stereo->getDisparity();
此时,我们还可以使用 getDenseMatches()
方法提取所有对应的点,并将它们导出到文件中。
vector<stereo::MatchQuasiDense> matches;
stereo->getDenseMatches(matches);
std::ofstream dense("./dense.txt", std::ios::out);
for (
uint i=0; i< matches.size(); i++)
{
dense << matches[i].p0 << matches[i].p1 << endl;
}
dense.close();