目标
本教程中,你将学习如何
- 配置一个 QuasiDenseStero 对象
- 计算密集的立体交差。
#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:2160
模板类,用于指定图像或矩形的大小。
定义 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
与磁盘上的文件关联的文件存储的“黑盒”表示。
定义 core.hpp:102
说明
该程序加载立体图像对。
在导入图像后。
leftImg = imread("./imgLeft.png", IMREAD_COLOR);
rightImg = imread("./imgRight.png", IMREAD_COLOR);
我们需要了解单个图像的帧大小,才能创建 QuasiDesnseStereo
对象的实例。
由于我们没有在构造函数中指定第二个参数,QuasiDesnseStereo
对象将加载默认参数。
然后,我们可以像这样将导入的立体图像作为 process 方法中的参数传递
stereo->process(leftImg, rightImg);
process 方法包含该类的多数功能,并且执行以下两项主要任务。
- 基于“追踪用的良好特征”和“金字塔 Lucas-Kanade”光流算法计算稀疏立体图
- 基于这些稀疏立体点,利用 Quasi Dense Stereo 方法来细化立体对应关系。
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();