目标
在本教程中,您将学习如何
- 配置 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:2187
用于指定图像或矩形大小的模板类。
Definition types.hpp:335
std::shared_ptr< _Tp > Ptr
Definition 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);
我们需要知道单张图像的帧大小,以便创建一个 QuasiDesnseStereo 对象的实例。
因为我们没有在构造函数中指定第二个参数,所以 QuasiDesnseStereo 对象将加载默认参数。
然后我们可以像这样在 process 方法中传递导入的立体图像
stereo->process(leftImg, rightImg);
process 方法包含该类的大部分功能,并且主要做两件事。
- 计算基于“Good Features to Track”和“pyramidal Lucas-Kanade”光流算法的稀疏立体匹配
- 基于这些稀疏立体点,使用准稠密立体匹配方法来稠密化立体对应关系。
执行 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();