根据您的解决方案提取特征有两个部分。第一部分是检测关键点,第二部分是描述它们。目前,您正在使用 SIFT 和 ORB 进行这两个阶段,并提出不同大小的矩阵。相反,请使用以下框架:
// Construct detectors
cv::FeatureDetector siftDetector, orbDetector;
siftDetector.create("SIFT");
orbDetector.create("ORB");
// Detect keypoints
std::vector<cv::Keypoint> siftPoints, orbPoints;
siftDetector.detect(img, siftPoints);
orbDetector.detect(img, orbPoints);
// Concantenate the vectors
siftPoints.insert(siftPoints.end(), orbPoints.begin(), orbPoints.end());
// Construct descriptor (SIFT used as example)
cv::FeatureDescriptor siftDescriptor;
siftDescriptor.create("SIFT");
// Compute descriptors
cv::Mat descriptors;
siftDescriptor.compute(img, siftPoints, descriptors);
您现在拥有所有检测到的关键点的 SIFT 描述。
PS:我还没有编译这段代码,所以请仔细检查拼写错误和语法。