当您执行特征描述符的匹配时,您应该得到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;
只需计算两点之间的距离:
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 对象的内存地址。