opencvを勉強中で質問させていただきます。opencvの追加モジュールをインストールしてsift,surfを用いたサンプルプログラムを実行したいのですがつぎのようなエラーが解決できずに手詰まりとなっています。知恵のある方何かお力添えいただけないでしょうか。
環境は
windows10
visual studio 2019
opencv4.1.2
です
ソースコードは以下の通りです。ビルドは問題なく通るのですがデバック実行時にエラーとなります。
C++
1コード 2#include <opencv2/opencv.hpp> 3#include <opencv2/xfeatures2d.hpp> 4#include <opencv2/xfeatures2d/nonfree.hpp> // SIFT・SURFモジュール用 5 6void FeatureMatching(void) 7{ 8 // 画像の読み込み 9 cv::Mat img1 = cv::imread("C:\opencv_build\sources\samples\data\02-02-a.jpg"); 10 cv::Mat img2 = cv::imread("C:\opencv_build\sources\samples\data\02-02-b.jpg"); 11 12 // 特徴点抽出 13 auto detector = cv::xfeatures2d::StarDetector::create(); 14 std::vector<cv::KeyPoint> keypoint1, keypoint2; 15 detector->detect(img1, keypoint1); 16 detector->detect(img2, keypoint2); 17 18 // 特徴記述 19 auto extractor = cv::xfeatures2d::FREAK::create(); 20 cv::Mat descriptor1, descriptor2; 21 extractor->compute(img1, keypoint1, descriptor1); 22 extractor->compute(img2, keypoint2, descriptor2); 23 24 // マッチング 25 auto matcher = cv::DescriptorMatcher::create("BruteForce-L1"); 26 std::vector<cv::DMatch> dmatch; 27 if (true) 28 { 29 // クロスチェックする場合 30 std::vector<cv::DMatch> match12, match21; 31 matcher->match(descriptor1, descriptor2, match12); 32 matcher->match(descriptor2, descriptor1, match21); 33 for (size_t i = 0; i < match12.size(); i++) 34 { 35 cv::DMatch forward = match12[i]; 36 cv::DMatch backward = match21[forward.trainIdx]; 37 if (backward.trainIdx == forward.queryIdx) 38 dmatch.push_back(forward); 39 } 40 } 41 else 42 { 43 // クロスチェックしない場合 44 matcher->match(descriptor1, descriptor2, dmatch); 45 } 46 47 // マッチング結果の表示 48 cv::Mat out; 49 cv::drawMatches(img1, keypoint1, img2, keypoint2, dmatch, out); 50 cv::imshow("matching", out); 51 while (cv::waitKey(1) == -1); 52} 53 54int main(void) { 55 FeatureMatching(); 56 return 0; 57}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/16 12:49
2020/05/16 14:01
2020/05/17 11:11
2020/05/17 12:26