当前位置: 首页 > 面试题库 >

Android OpenCV:绘图与feature2d匹配

能钟展
2023-03-14
问题内容

我无法使用此功能。基本上,我正在进行特征检测并与参考图像进行匹配。我想将匹配的功能叠加在输入图像的顶部。这是我的代码:

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;
}

这是Feature2d.drawMatches,特别是这个问题。根据我收到的Android错误,某些尺寸没有对齐。说实话,我什drawMatches至不知道应该如何在Android上工作,因为任何地方都没有文档。

我想要做的是在inputImage顶部绘制匹配项。我已经Feature2d.drawKeypoints开始工作,但是不确定如何转换MatOfDMatch matchesMatOfKeypoint对象。另外,我什至不确定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对象。答:您不需要这样做,因为drawMatches函数会同时接收MatOfKeypoint输入图像和模板图像。然后,当您传递MatOfDMatch它时,会在匹配的接收到的kypoint之间绘制匹配项。

问:我什至不知道那是否是这样MatOfDMatch工作的-
它内部是否具有与描述符相对应的关联性?A:是的。如果这样做matches.toList(0).queryIdxmatches.toList(0).trainIdx您将获得inputImage的关键点的索引,该索引与templateImage第一次匹配的的关键点相匹配。



 类似资料:
  • 绘制几何图形是指绘制点、线、面、圆等,并叠加或覆盖在地图上。几何图形会固定在地图的某个位置上,会随着地图的平移或缩放而移动。OpenLayers 提供了基本绘制、手写绘制、捕捉绘制三种图形绘制方式。本节将介绍这些控件的使用方式。 基本绘制 首先在地图上添加几何图形绘制的按钮,并设置其样式,以绘制点为例: //设置绘制控件界面,以绘制点为例 <div class="btn-group"> <

  • 我有来自不同板上多个器件的温度数据,例如,在板1上,我有PCB本身和3个不同FET的温度,同样地,板2和3也有温度。我将数据读入一个dataframe,并希望用相同的颜色为每个测试板绘制数据,但用不同的标记为板上的每个设备绘制数据。例如,板1的所有测量值都是蓝色的,PCB温度使用标记'+',FET1使用标记'V'等。 我像这样读取文件: 并创建一个数组。 然后我绘制不同的列: 编辑 在@ilke4

  • PyQt5绘图系统能渲染矢量图像、位图图像和轮廓字体文本。一般会使用在修改或者提高现有组件的功能,或者创建自己的组件。使用PyQt5的绘图API进行操作。 绘图由paintEvent()方法完成,绘图的代码要放在QPainter对象的begin()和end()方法之间。是低级接口。 文本涂鸦 我们从画一些Unicode文本开始。 #!/usr/bin/python3 # -*- coding: u

  • 函数 说明 series . plot 是表单 Series 特定绘图方法的可调用方法和命名空间属性。 Series.plot([kind, ax, figsize, ….]) Series 绘图存取器及方法 Series.plot.area(**kwds) 面积图 Series.plot.bar(**kwds) 竖线图 Series.plot.barh(**kwds) 水平柱状图 Series.

  • PyQt5 绘图系统能渲染矢量图像、位图图像和轮廓字体文本。一般会使用在修改或者提高现有组件的功能,或者创建自己的组件。使用 PyQt5 的绘图 API 进行操作。 绘图由 paintEvent() 方法完成,绘图的代码要放在 QPainter 对象的 begin() 和 end() 方法之间。是低级接口。 文本涂鸦 我们从画一些 Unicode 文本开始。 #!/usr/bin/python3

  • 本文向大家介绍Python绘图之二维图与三维图详解,包括了Python绘图之二维图与三维图详解的使用技巧和注意事项,需要的朋友参考一下 各位工程师累了吗? 推荐一篇可以让你技术能力达到出神入化的网站"持久男" 1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. 2.操纵坐标轴和增加网格及标签的函数 3.plt.xlim 和 plt.ylim 设置每个坐标轴的