【问题标题】:How to separate the query and the train image from the Mat object returned from DrawMatches() method如何从 DrawMatches() 方法返回的 Mat 对象中分离查询和训练图像
【发布时间】:2015-04-13 14:38:43
【问题描述】:

我正在尝试检测视频中的对象。我使用 SURF 作为特征检测和描述符提取器,使用 BRUTFORCE 作为匹配器。我用面孔测试了我的工作,我拍了一张我的照片,当我运行相机并将它对准我时,我的脸被检测到并在它周围画了一个矩形。我试图进行另一个测试,我捕获了鼠标的图像并调整了它的大小,当我运行凸轮时,它没有被检测到

我面临的问题是:

1-在这种情况下,查询/对象图像的大小很重要吗?我问这个问题是因为我捕捉到的自己的图像比鼠标的大,而且人脸被检测到而鼠标没有。

2-无论我使用哪个图像作为查询/对象图像,如何在没有查询/对象图像的情况下仅显示火车/场景图像的相机预览。我问这个问题是因为,我得到的是如下图所示的东西,而我想做的是here 所示的东西,我检查了该链接中的代码,它是 C++ 但是我遵循了同样的方法,本教程也使用了“drawMatches”方法,该方法在 java 中有一个对等点 Features2D.DrawMatches(),它们都返回一个 Mat 对象,左侧是查询/对象图像,而火车/场景图像在我在下面发布的图片中也显示了右侧。

我想要做的是,在没有查询/对象图像的情况下显示在相机输出上,我希望为相机输出指定的区域仅显示从相机捕获的火车/场景图像。

请告诉我如何解决这个问题,我想做一些我在链接中引用的教程中所示的事情。

【问题讨论】:

    标签: opencv pattern-matching video-capture feature-detection feature-descriptor


    【解决方案1】:

    1 - 尺寸很重要,但在您的情况下,我认为最关键的问题是“纹理”。 SURF 检测“纹理梯度”较强的兴趣点。就您的鼠标而言,渐变主要是平滑的,除了徽标(fujitsu)、按钮和图像边框周围。在您指向的教程中,您注意到它使用了一个非常有质感的对象来演示效果。

    2 - 据我所知,有全自动的方法来做你想做的事,但只需几个步骤即可完成。基本上,您必须确定对象的周围框然后绘制它。要绘制,使用 cv::rectangle 更容易,但使用四个(或更多....) cv::line 可以更精确。要确定周围的框,您可以估计过滤匹配中的极值点。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 2021-07-21
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多