目的
このチュートリアルでは、次のことを学ぶ
- 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;
}
Comma-separated Matrix Initializer.
Definition mat.hpp:964
MatSize size
Definition mat.hpp:2511
Template class for specifying the size of an image or rectangle.
Definition types.hpp:338
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23
uint32_t uint
Definition interface.h:37
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
int waitKey(int delay=0)
Waits for a pressed key.
void namedWindow(const String &winname, int flags=WINDOW_AUTOSIZE)
Creates a window.
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
解説:
このプログラムはステレオ画像ペアを読み込む。
画像を取り込んだ後。
leftImg =
imread(
"./imgLeft.png", IMREAD_COLOR);
rightImg =
imread(
"./imgRight.png", IMREAD_COLOR);
QuasiDesnseStereo オブジェクトのインスタンスを生成するため、単一画像のフレームサイズを知る必要がある。
コンストラクタで第2引数を指定しなかったため、QuasiDesnseStereo オブジェクトはデフォルトのパラメータを読み込む。
次に、取り込んだステレオ画像を以下のように process メソッドへ渡せる
stereo->process(leftImg, rightImg);
process メソッドはこのクラスの機能の大半を含んでおり、主に2つのことを行う。
- "Good Features to Track" と "pyramidal 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();