2

私は50x50の小さな画像を持っています。ORB キーポイントを次のように見つけます。

(いくつかのキーポイントを検出するには、patchSize のデフォルト パラメータを 31 から 14 に変更する必要があることに注意してください):

 OrbFeatureDetector det(500,1.2f,8,14,0,2,0,14);   //> (From 31 to 14)
 OrbDescriptorExtractor desc;

 det.detect(image,kp)
 //> kp.size() is about 50 keypoints

キーポイントを orb.compute に渡すと、すべてのキーポイントが消去されます。

 desc.compute(image,kp,kpDesc);
 //> Now kp.size() == 0

これは、.compute を呼び出した後、メソッドがすべてのキーポイントを削除したことを意味します。

私が使用している画像はこれです: ここに画像の説明を入力

これはある種のバグだと思います。誰かが確認できますか?OpenCV 2.4.5 を使用しています

4

2 に答える 2

4

特徴検出器と記述子抽出器の 2 つのオブジェクトを作成しています。これらは同じパラメータで初期化する必要があります。

cv::ORB次のように、 のインスタンスを 1 つ作成してから を呼び出すことで、同じパラメータを 2 回設定するコードの重複を減らすことができますcv::ORB::operator()

cv::ORB orb(500,1.2f,8,14,0,2,0,14);
orb(image,cv::noArray(),kp,kpDesc);

特徴検出器と抽出器は実際には同じオブジェクトであるため、これは最初のソリューションと同じになります。OpenCV ヘッダーから:

typedef ORB OrbFeatureDetector;
typedef ORB OrbDescriptorExtractor;
于 2013-05-22T16:28:18.067 に答える