SiftFeatureDetector()和Ptr <featuredetector> </featuredetector>之间的区别

时间:2012-11-04 16:57:14

标签: opencv sift feature-detection surf

SiftFeatureDetector()和Ptr之间的区别是什么。它们显然具有相同的功能。 opencv tutorial使用SiftFeatureDetector但是当clicking on the official documentation使用Ptr并且没有提到SiftFeatureDetector()时,所以我不能读它。在教程中他们使用了这个:int minHessian = 400; SurfFeatureDetector detector( minHessian );我不知道minHessian应该做什么。

另外我在同一张图片上尝试了它们,它们都有相同的结果,那为什么它们不同呢?

int _tmain(int argc, _TCHAR* argv[])
{
//initModule_nonfree();
Mat img;

img = imread("c:\\box.png", 0);

//cvtColor( img, gry, CV_BGR2GRAY );

 //SiftFeatureDetector detector;
//vector<KeyPoint> keypoints;
//detector.detect(img, keypoints);

Ptr<FeatureDetector> feature_detector = FeatureDetector::create("SIFT");
vector<KeyPoint> keypoints;

feature_detector->detect(img, keypoints);

Mat output;

drawKeypoints(img, keypoints, output, Scalar::all(-1));

namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", output);
waitKey(0);



return 0;

}

谢谢

1 个答案:

答案 0 :(得分:2)

编辑:请参阅以下评论中的@ gantzer89修正。(保留原始文字以保持历史清晰度。)


根据我的一般经验,使用FeatureDetector :: create()语法(在您引用的“官方文档”中讨论here)允许灵活地通过参数文件在运行时指定算法,而更多特定类(如SiftFeatureDetector)提供了更多自定义的机会。

create()方法以一组默认的特定于算法的参数开始,而算法特定的类允许在构造时自定义这些参数。因此,create()方法为minHessian分配一个默认值,而SiftFeatureDetector构造函数提供了选择minHessian值的机会。

根据经验,如果您想快速尝试使用哪个算法,请使用create()语法,如果您想尝试微调特定算法,请使用特定于算法的类构造函数。