我试图用SIFT匹配两幅图像,我用下面的代码: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> = -1 & & actualNlayers < = nOctaveLayers)中的功能未知,文件...... \ SRC \的OpenCV \模块\非游离\ SRC \ sift.cpp,线755" 。
据我所知,该函数得到一个非正值,所以我打印了所有可能的值从我的代码,我发现我的两个关键点向量的大小是-616431和-616422。 我使用的两张图像是黑色&白色图像,黑色底色和中间的手(白色)。
发生了什么事?我是否使用无效图像?我使用的功能cv :: SiftFeatureDetector和cv :: SiftDescriptorExtractor错误?
好的,我明白了。 cv :: SiftFeatureDetector检测器(50); cv :: SiftDescriptorExtractor提取器; 它使用这些参数。 –