OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
準密ステレオ (Quasi dense Stereo)

目的

このチュートリアルでは、次のことを学ぶ

  • QuasiDenseStero オブジェクトを設定する
  • 密なステレオ対応を計算する。
#include <opencv2/core.hpp>
#include <fstream>
using namespace cv;
using namespace std;
int main()
{
cv::Mat rightImg, leftImg;
leftImg = imread("./imgLeft.png", IMREAD_COLOR);
rightImg = imread("./imgRight.png", IMREAD_COLOR);
cv::Size frameSize = leftImg.size();
Ptr<stereo::QuasiDenseStereo> stereo = stereo::QuasiDenseStereo::create(frameSize);
stereo->process(leftImg, rightImg);
cv::Mat disp;
disp = stereo->getDisparity();
cv::namedWindow("disparity map");
cv::imshow("disparity map", disp);
cv::namedWindow("right channel");
cv::namedWindow("left channel");
cv::imshow("left channel", leftImg);
cv::imshow("right channel", rightImg);
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
Definition core.hpp:107
STL namespace.

解説:

このプログラムはステレオ画像ペアを読み込む。

画像を取り込んだ後。

cv::Mat rightImg, leftImg;
leftImg = imread("./imgLeft.png", IMREAD_COLOR);
rightImg = imread("./imgRight.png", IMREAD_COLOR);

QuasiDesnseStereo オブジェクトのインスタンスを生成するため、単一画像のフレームサイズを知る必要がある。

cv::Size frameSize = leftImg.size();
Ptr<stereo::QuasiDenseStereo> stereo = stereo::QuasiDenseStereo::create(frameSize);

コンストラクタで第2引数を指定しなかったため、QuasiDesnseStereo オブジェクトはデフォルトのパラメータを読み込む。

次に、取り込んだステレオ画像を以下のように process メソッドへ渡せる

stereo->process(leftImg, rightImg);

process メソッドはこのクラスの機能の大半を含んでおり、主に2つのことを行う。

  • "Good Features to Track" と "pyramidal Lucas-Kanade" フローアルゴリズムに基づいて疎なステレオを計算する
  • それらの疎なステレオ点に基づき、Quasi Dense Stereo 法を用いてステレオ対応を密にする。

process() の実行後、ステレオの視差画像を表示できる。

cv::Mat disp;
disp = stereo->getDisparity();
cv::namedWindow("disparity map");
cv::imshow("disparity map", disp);

この時点で、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();