你好我正在尝试实现一个快速特征检测器代码,在它的初始阶段我得到以下错误
(1)没有重载函数的实例“cv :: FastFeatureDetector :: detect”匹配参数列表
(2)“KeyPointsToPoints”未定义
请帮帮我。
#include <stdio.h>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;
int main()
{
Mat img1 = imread("0000.jpg", 1);
Mat img2 = imread("0001.jpg", 1);
// Detect keypoints in the left and right images
FastFeatureDetector detector(50);
Vector<KeyPoint> left_keypoints,right_keypoints;
detector.detect(img1, left_keypoints);
detector.detect(img2, right_keypoints);
vector<Point2f>left_points;
KeyPointsToPoints(left_keypoints,left_points);
vector<Point2f>right_points(left_points.size());
return 0;
}
答案 0 :(得分:7)
问题出在这一行:
Vector<KeyPoint> left_keypoints,right_keypoints;
C ++区分大小写,它看到Vector
与vector
不同(它本应该是什么)。为什么Vector
的工作超出了我的范围,我原本预计会出现错误。
cv::FastFeatureDetector::detect
只知道如何使用vector
,而不是Vector
,因此请尝试修复此错误并重试。
此外,OpenCV库中不存在KeyPointsToPoints
(除非您自己编程),请务必使用KeyPoint::convert(const vector<KeyPoint>&, vector<Point2f>&)
进行转换。
答案 1 :(得分:0)
代码中存在一些小问题。首先,您缺少using namespace std
,这是使用向量所需的方式。您还缺少向量#include <vector>
的包含。 vector<KeyPoints>
也应该有一个小写v。我也不确定KeyPointsToPoints是否是OpenCV的一部分。您可能必须自己实现此功能。我不确定,我以前还没有见过它。
#include <stdio.h>
#include <vector>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat img1 = imread("0000.jpg", 1);
Mat img2 = imread("0001.jpg", 1);
// Detect keypoints in the left and right images
FastFeatureDetector detector(50);
vector<KeyPoint> left_keypoints,right_keypoints;
detector.detect(img1, left_keypoints);
detector.detect(img2, right_keypoints);
vector<Point2f>left_points;
for (int i = 0; i < left_keypoints.size(); ++i)
{
left_points.push_back(left_keypoints.pt);
}
vector<Point2f>right_points(left_points.size());
return 0;
}
我没有测试上面的代码。查看OpenCV文档here