我正在尝试使用SIFT匹配两个图像,我正在使用以下代码:
cv::initModule_nonfree();
cv::Mat matFrame(frame);
cv::Mat matFrameAnt(frameAnterior);
cv::SiftFeatureDetector detector(400); //I've tried different values here
cv::SiftDescriptorExtractor extractor(400); //but i get always the same error
std::vector<cv::KeyPoint> keypoints1;
std::vector<cv::KeyPoint> keypoints2;
detector.detect( matFrame, keypoints1 );
detector.detect( matFrameAnt, keypoints2 );
cv::Mat feat1;
cv::Mat feat2;
cv::Mat descriptor1;
cv::Mat descriptor2;
extractor.compute( matFrame, keypoints1, descriptor1 );
extractor.compute( matFrameAnt, keypoints2, descriptor2 );
std::vector<cv::DMatch> matches;
cv::BFMatcher matcher(cv::NORM_L2, false);
matcher.match(descriptor1,descriptor2, matches);
cv::Mat result;
cv::drawMatches( matFrame, keypoints1, matFrameAnt, keypoints2, matches, result );
cv::namedWindow("SIFT", CV_WINDOW_AUTOSIZE );
cv::imshow("SIFT", result);
我运行代码时遇到此错误(编译完美)。
“OpenCV错误:断言失败(firstOctave&gt; = -1&amp;&amp; actualNlayers&lt; = nOctaveLayers)未知函数,文件...... \ src \ opencv \ modules \ nonfree \ src \ sift。 cpp,第755行“。
我知道该函数正在获得非正值,所以我从我的代码中打印了所有可能的值,我发现我的两个关键点向量的大小是-616431和-616422。 我正在使用的两个图像是黑白图像,黑色背景和中间的手(白色)。
发生了什么事?我使用的是无效图片吗?我使用的函数cv :: SiftFeatureDetector和cv :: SiftDescriptorExtractor错了吗?
答案 0 :(得分:0)
似乎你不知道自己在做什么。这个功能相当没有文档,因此请尝试深入挖掘源代码,或者让我告诉你你做了什么。
cv::SiftFeatureDetector detector(50)
这意味着您将获得最多50场比赛。
cv::SiftDescriptorExtractor extractor(400);
这意味着您的提取放大倍数为400x。对于正常结果,此参数应为“1”。