C++ SIFT SURF ORB算法时间对比

对比特征检测算法的时间,发现并不是预想的结果ORB算法时间最长,对此很疑惑,希望可以得到帮助解答!
但是一般情况下,都是orb>>surf>>sift,而且差一个数量级。

我的运行结果:

img

运行环境:Windows11
CPU:AMD
Visual Studio 2107 C++ OpenCv 3.4.1

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main(int argc, char **argv) 
{
    //-- 读取图像
    Mat img = imread("E:\\code download\\5.jpg", CV_LOAD_IMAGE_COLOR);
    assert(img.data != nullptr);

    //-- 初始化
    std::vector keypoints_orb, keypoints_sift, keypoints_surf, keypoints_kaze;
    Ptr detector_orb = ORB::create(1000, 1.2f, 8, 31, 0, 2, ORB::HARRIS_SCORE, 31, 20);
    Ptr detector_sift = xfeatures2d::SIFT::create(1000);
    Ptr detector_surf = xfeatures2d::SURF::create(700);
    Ptr detector_kaze = KAZE::create();

    //-- Orb特征点
    chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
    detector_orb->detect(img, keypoints_orb);
    chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
    chrono::duration<double> time_used = chrono::duration_castdouble>>(t2 - t1);
    cout << "number of keypoints=" << keypoints_orb.size() << endl;
    cout << "time of orb=" << time_used.count() << endl;
    cout << "***************************************" << endl;

    Mat outimg_orb;
    drawKeypoints(img, keypoints_orb, outimg_orb, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    //imshow("ORB features", outimg_orb);

    //-- Sift特征点
    t1 = chrono::steady_clock::now();
    detector_sift->detect(img, keypoints_sift);
    t2 = chrono::steady_clock::now();
    time_used = chrono::duration_castdouble>>(t2 - t1);
    cout << "number of keypoints=" << keypoints_sift.size() << endl;
    cout << "time of sift=" << time_used.count() << endl;
    cout << "***************************************" << endl;

    Mat outimg_sift;
    drawKeypoints(img, keypoints_sift, outimg_sift, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    //imshow("SIFT features", outimg_sift);

    //-- Surf特征点
    t1 = chrono::steady_clock::now();
    detector_surf->detect(img, keypoints_surf);
    t2 = chrono::steady_clock::now();
    time_used = chrono::duration_castdouble>>(t2 - t1);
    cout << "number of keypoints=" << keypoints_surf.size() << endl;
    cout << "time of surf=" << time_used.count() << endl;
    cout << "***************************************" << endl;

    Mat outimg_surf;
    drawKeypoints(img, keypoints_surf, outimg_surf, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    //imshow("SURF features", outimg_surf);

    //-- Kaze特征点
    t1 = chrono::steady_clock::now();
    detector_surf->detect(img, keypoints_kaze);
    t2 = chrono::steady_clock::now();
    time_used = chrono::duration_castdouble>>(t2 - t1);
    cout << "number of keypoints=" << keypoints_kaze.size() << endl;
    cout << "time of kazef=" << time_used.count() << endl;
    cout << "***************************************" << endl;

    Mat outimg_kaze;
    drawKeypoints(img, keypoints_kaze, outimg_kaze, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    //imshow("KAZE features", outimg_kaze);

    waitKey(0);


    return 0;
}

debug和release速度区别很大,建议都换成release模式然后再对比速度才是准确的