0

SiftFeatureDetector() と Ptr の違いは何ですか。どちらも明らかに同じ機能を持っています。opencvチュートリアルでは SiftFeatureDetector を使用していますが、公式ドキュメントをクリックすると 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;

}

ありがとうございました

4

1 に答える 1

2

編集: 以下のコメントで @gantzer89 による修正を参照してください。 (歴史を明確にするために、元のテキストをそのままにしておきます。)


私の一般的な経験では、FeatureDetector::create() 構文 (ここで引用した「公式ドキュメント」で説明されています) を使用すると、パラメーター ファイルを介して実行時にアルゴリズムを柔軟に指定できますが、SiftFeatureDetector などのより具体的なクラスは、より多くのカスタマイズの機会を提供します。

create() メソッドは、デフォルトのアルゴリズム固有のパラメーターのセットで始まりますが、アルゴリズム固有のクラスでは、構築時にこれらのパラメーターをカスタマイズできます。したがって、create() メソッドはデフォルト値を minHessian に割り当てますが、SiftFeatureDetector コンストラクターは minHessian の値を選択する機会を提供します。

経験則として、使用するアルゴリズムをすばやく試してみたい場合は create() 構文を使用し、特定のアルゴリズムを微調整して試してみたい場合は、アルゴリズム固有のクラス コンストラクターを使用します

于 2012-11-04T17:15:27.707 に答える