機能の記述子の一致を実行している場合は、を取得する必要がありますMatOfDMatch
。コードは次のようになります。
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
MatOfDMatch matches = new MatOfDMatch();
matcher.match(descriptors1,descriptors2 ,matches);
あなたがより簡単な操作のためにに変換MatOfDMatch
することができた後。List<DMatch>
あなたはそれを行うことができます:
List<DMatch> matchesList = matches.toList();
次に、一致したポイントにアクセスし、次の方法でデカルト座標を取得できます。
Point pt1 = keypoints1.toList().get(matchesList.get(i).queryIdx).pt;
Point pt2 = keypoints2.toList().get(matchesList.get(i).trainIdx).pt;
2点間の距離を計算した後:
double dist_x_pow = Math.pow(Math.abs(pt1.x - pt2.x),2);
double dist_y_pow = Math.pow(Math.abs(pt1.y - pt2.y),2);
double DISTANCE = Math.sqrt(dist_x_pow + dist_y_pow);
についてはわかりませんがnativeObj
、dataAddr
OpenCVライブラリがCで実装されていることに関係していると思います。この値は、Matオブジェクトのメモリ内のアドレスを表していると思います。