Java中OpenCV中的KeyPoint和MatchDpoint是啥

Posted

技术标签:

【中文标题】Java中OpenCV中的KeyPoint和MatchDpoint是啥【英文标题】:What are KeyPoint and MatchDpoint in OpenCV in JavaJava中OpenCV中的KeyPoint和MatchDpoint是什么 【发布时间】:2016-07-03 12:10:30 【问题描述】:

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

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

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

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

和平

【问题讨论】:

【参考方案1】:

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++ 功能的映射。

【讨论】:

嘿,我只是有一个小问题,找不到答案,但不值得单独提出一个问题:Mat.cols() 和 Mat.width() 有什么区别

以上是关于Java中OpenCV中的KeyPoint和MatchDpoint是啥的主要内容,如果未能解决你的问题,请参考以下文章

将 MatofKeypoint 从 Java 传递到 c++ 作为 vector<Keypoint> - opencv

opencv中的函数drawmatches粗细怎么设置,是哪个参数

Opencv的KeyPoint和DMatch数据结构

python opencv KeyPoint

python opencv KeyPoint

从 java opencv 中的字节数组创建 CV_16UC1 Mat