OpenCV ORB 特征

4

我会使用ORB特征检测器和提取器从一组灰度图像中获取特征。

问题在于,如果我尝试多次检测\提取同一幅图像,则会得到不同的特征,因此无法后续用于检测。

代码如下:

bmp=BitmapFactory.decodeResource(getResources(),R.drawable.t1);
Utils.bitmapToMat(bmp, mat);
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
detector.detect(mat, keypoints);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);
extractor.compute(mat, keypoints, features);

也许有人对此有一些见解?
1个回答

2

这不应该是情况...你应该得到一致的性能。然而,我分享我的代码,使用Orb特征检测器和Orb描述符提取器在两个图像上。您可以使用任何匹配器来匹配它们。希望这可以帮助您...

#include "iostream"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/flann/flann.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <vector>


using namespace cv;
using namespace std;

int main()
{
    Mat image1,image2;
    imageA = imread("C:\\lena.jpg",0);
    imageB = imread("C:\\lena1.bmp",0);

    vector<KeyPoint> keypointsA,keypointsB;
    Mat descriptorsA,descriptorsB;

    std::vector<DMatch> matches;

    OrbFeatureDetector detector;

    OrbDescriptorExtractor extractor;

    BruteForceMatcher<Hamming> matcher;

    detector.detect(imageA,keypointsA);
    detector.detect(imageB,keypointsB);

    extractor.compute(imageA,keypointsA,descriptorsA);
    extractor.compute(imageB,keypointsB,descriptorsB);

    return 0;
 }

是的,应该是这样的。我正在尝试为Android项目做同样的事情,但每次仍然会得到不同的功能。也许还有一些我不知道的先决条件?例如Mat类型。 - user1494126
你能上传你的两张图片吗? - rotating_image

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接