SIFT断言失败错误

时间:2013-06-04 10:50:13

标签: sift assertion

我正在尝试使用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错了吗?

1 个答案:

答案 0 :(得分:0)

似乎你不知道自己在做什么。这个功能相当没有文档,因此请尝试深入挖掘源代码,或者让我告诉你你做了什么。

cv::SiftFeatureDetector detector(50)

这意味着您将获得最多50场比赛。

cv::SiftDescriptorExtractor extractor(400);

这意味着您的提取放大倍数为400x。对于正常结果,此参数应为“1”。

其余文档在此处:http://docs.opencv.org/2.3/modules/features2d/doc/common_interfaces_of_feature_detectors.html#SiftFeatureDetector