java - 安卓 OpenCV : drawing matches with feature2d

标签 java android opencv

我无法使用此功能。基本上我正在做特征检测并与引用图像匹配。我想将匹配的特征叠加在我的输入图像之上。这是我的代码:

public Mat startProcessing(Mat inputImage) {

    Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB);
    myFeatures.detect(rgb, keypoints);
    descriptorExtractor.compute(inputImage, keypoints, imageDescriptors);
    descriptorMatcher.match(templateDescriptors, imageDescriptors, matches);

    Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb); 

    Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA);
    return outputImage;
}

问题出在 Features2d.drawMatches 上。根据我得到的 Android 错误,某些尺寸没有对齐。说实话,我什至不确定 drawMatches 应该如何在 Android 上运行,因为没有任何文档。

我想要做的是在 inputImage 的顶部绘制匹配项。我已经让 Feature2d.drawKeypoints 开始工作,但我不确定如何将 MatOfDMatch 匹配 转换为 MatOfKeypoint 对象。此外,我什至不确定 MatOfDMatch 是否是这样工作的——它内部是否有一些与描述符对应的关联性?

很抱歉到处都是,我在 Android 上使用 OpenCV 真的很难。那里的 C++ 文档很好,但 Android 资料很少。谢谢你的帮助!

最佳答案

我注意到的第一件事是您正在将图像从一种颜色空间转换到另一种颜色空间。这有点令人困惑。如果要在灰度图像上绘制匹配,则不需要执行此图像转换。 另一件事,你正在检测 RGB 图像上的关键点,然后从原始图像中提取描述符(我可以看到它是灰度)

此外,我建议您在函数内部检查图像是否属于同一类型。只需在日志中打印 inputImage 对象,看看两者是否都是 CV_8UC3 类型或等效类型。基本上你的代码应该是这样的:

Mat imageOut = inputImage.clone();
Features2d.drawMatches(inputImage, keypoints, templateImage, templateKeypoints, matches, imageOut);
Highgui.imwrite("result_match.jpeg", imageOut); 

回答别人你的问题:

问:我不确定如何将 MatOfDMatch 匹配项转换为 MatOfKeypoint 对象。 A:你不需要这样做,因为drawMatches函数接收输入图像和模板图像的MatOfKeypoint。然后,当您传递 MatOfDMatch 时,它会在匹配的接收到的 kypoint 之间绘制匹配项。

问:我什至不确定 MatOfDMatch 是否就是这样工作的 - 它内部是否有一些与描述符对应的关联性? A: 是的。如果您执行 matches.toList(0).queryIdxmatches.toList(0).trainIdx 您将获得 inputImage 的索引s 关键点,与 templateImage 的第一个匹配关键点匹配。

关于java - 安卓 OpenCV : drawing matches with feature2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16207993/

相关文章:

java - 从单独的类文件访问公共(public)静态类的状态

java - 在 JPA 中, native 查询是否发生回滚?

android - 如何在小窗口打开 "zxing Barcode"扫描画面?

OpenCV可视化模板匹配全过程

c# - 号码本地化不是不必要的吗?

Java 泛型作为方法的参数

java - 如何用动画平滑填充进度条

android - gradle buildscript 无法解析 buildSrc 中定义的对象

c++ - 如何分割叶图像中的感兴趣区域

python - 我如何使用Numpy设置具有2d索引数组的4d数组