1
私は2枚の画像の記述子の二つのベクトルマッチしていますOpencvでマッチを描くには?
cv::Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher();
std::vector<std::vector<cv::DMatch> > matches;
float maxDist = 10.0;
bdm->radiusMatch(descr2, descr1, matches, maxDist);
// descr1 from image1, descr2 from image2
std::vector<char> mask(matches.size(), 1);
をしかし、今私は、2枚の画像から見つかったマッチを描きたいです。
これは動作しません:
drawMatches(gmlimg, keylines, walls, keylines1, matches, outImg, cv::Scalar::all(-1), cv::Scalar::all(-1), mask, DrawLinesMatchesFlags::DEFAULT);
そして、これはどちらも:
あなたがBinaryDescriptorMatcher
を使用するときに使用するものです
std::vector< std::vector<cv::DMatch> >
、としてマッチを取得しているので
drawLineMatches(gmlimg, keylines, walls, keylines1, matches, outImg, cv::Scalar::all(-1), cv::Scalar::all(-1), mask, DrawLinesMatchesFlags::DEFAULT);
どのように機能していないのですか?どの画像に試合が期待されますか?私には 'cv :: Scalar :: all(255,255,255)'を実行してください。白い線が表示されるはずです。さらに、イメージ2から1までマッチしていますが、逆の方法で描画しています(しかし、 'gmlimg'がイメージ1か2であるかどうかわかりません) –
drawLineMatchesは動作しません。マッチはstd: :ベクトルが、私はstd :: vector >です。なぜなら、radiusMatchはそれを必要とするからです。 drawMatchesにはキーポイントが必要であり、キーポイントが必要です。 http://docs.opencv.org/3.0-beta/modules/line_descriptor/doc/drawing_functions.html http://docs.opencv.org/2.4.8/modules/features2d/doc/drawing_function_of_keypoints_and_matches .html –
Philipp
'drawMatches'が動作しないのと同じ理由はありませんか? –