为什么 OpenCV SIFT 特征提取会如此不准确?

问题描述 投票:0回答:0

我正在尝试使用 OpenCV 的 SIFT 类 执行 SIFT 特征提取,我相信我正在正确使用这些函数:

 std::string pathSIFT = "C:\\my\\image\\file\\directory";
    cv::Ptr<cv::SiftFeatureDetector> detector =
        cv::SiftFeatureDetector::create();
    std::vector<cv::KeyPoint> keypoints;
    cv::Mat output;
    for (int j = 0; j < images2SIFT.size(); j++) {
        detector->detect(images2SIFT.at(j), keypoints);
        std::string s = std::to_string(j);
        cv::drawKeypoints(images2SIFT.at(j), keypoints, output);
        cv::imshow(window_name, output);
        if (!std::filesystem::exists(pathSIFT + s + ".jpg")) {
            cv::imwrite(pathSIFT + s + ".jpg", output);
        }
        waitKey(200);
    }

但我看到像这样的图像

供参考,这是原始图像:

我查看了诸如 this 之类的资源,以发现我可能犯的一些错误,以及我发现的帮助人们使用

#include<opencv2\nonfree\nonfree.hpp>

library,是设置需要查找的关键点的数量 - 但当我尝试这个时,它似乎只是用随机点填充图像而不是使它更准确。

这是我图片的问题还是算法的问题?

c++ opencv computer-vision c++20 sift
© www.soinside.com 2019 - 2024. All rights reserved.