对比特征检测算法的时间,发现并不是预想的结果,ORB算法时间最长,对此很疑惑,希望可以得到帮助解答!
但是一般情况下,都是orb>>surf>>sift,而且差一个数量级。
我的运行结果:
运行环境: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模式然后再对比速度才是准确的