1

亲爱的 1-我知道 Point 类是关于两个通道整数值坐标(点):像 MatOfPoint 是整数点的向量。KeyPoint 类也一样吗?我知道这是一个包含显着点的类。将它们视为两个通道浮点值坐标(点)是真的吗?看看下面的几行:

KeyPoint test;
test= new float[]{x,y};

我写信是为了看看我对 KeyPoint 的解释是否有效。请验证这一点。

2-什么是 Dmatch match.trainIdx?我的意思是 trainIdx 是什么?

和平

4

1 回答 1

2

KeyPoint 存储显着点描述。它存储 x、y、角度、大小等。请参阅http://docs.opencv.org/java/2.4.2/org/opencv/features2d/KeyPoint.html
在 Java 中手动初始化它的正确方法是:

KeyPoint test = new KeyPoint(x, y, size);

或获取图像的关键点列表:

Mat srcImage;
MatOfKeyPoint keypoints;
Mat descriptors;
DescriptorExtractor descExctractor = DescriptorExtractor.create(DescriptorExtractor.SIFT);
descExctractor.compute(srcImage, keypoints, descExctractor);
KeyPoint[] keyPointsArray = keypoints.toArray()

DMatch 包含匹配关键点描述符的描述。参见http://docs.opencv.org/java/2.4.2/org/opencv/features2d/DMatch.html
它由 DescriptorMatcher 实现返回(match、knnmatch、radiusmatch 函数)。您将矩阵 queryDescriptors 和 trainDescriptors 传递给这些函数之一。
trainIdx是 trainDescriptors 中的行索引,它最接近 queryDescriptors 中的给定描述符。

我建议阅读 C++ 的原始 OpenCV 描述和示例,Java 仅通过 JNI 提供到 C++ 功能的映射。

于 2016-03-17T10:25:12.917 回答