亲爱的们 1-我知道 Point 类是关于两个通道整数值坐标(点):就像 MatOfPoint 是整数点的向量。 和KeyPoint类一样吗? 我知道它是一个包含显着点的类。将它们视为两个通道浮点值坐标(点)是真的吗?看下面几行:
KeyPoint test;
test= new float[]{x,y};
我写这些是为了看看我对 KeyPoint 的解释是否有效。请验证这一点。
2-什么是Dmatch match.trainIdx?我的意思是trainIdx是什么?
和平
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 中的给定描述符。
我建议阅读原始 OpenCV 描述和 C++ 示例,Java 仅通过 JNI 提供到 C++ 功能的映射。