【问题标题】:How to use template matching to identify different size of objects in opencv/javacv?如何使用模板匹配来识别opencv/javacv中不同大小的对象?
【发布时间】:2012-08-23 07:49:30
【问题描述】:

我浏览了几个模板匹配教程,我注意到大多数教程都试图匹配从原始图像裁剪的模板。但是我想知道是否可以识别具有不同宽度和高度的相似物体?

在我的项目中,我生成了以下类型的图像。

我需要从中识别出以下组件。

如何使用 opencv 或 javacv 存档?是否可以为此使用模板匹配?因为这个对象可以有不同的大小,所以可以使用它吗?请问有人可以给出简单的代码示例来识别这个对象吗?

【问题讨论】:

    标签: java opencv javacv


    【解决方案1】:

    我不确定它在实际情况下是否对您有所帮助,但简单的阈值对您的输入图像起到了作用:

    代码:

    Mat src = imread("input.jpg"), tmp;
    cvtColor(src, tmp, CV_BGR2GRAY);
    threshold(tmp, tmp, 200, 255, THRESH_BINARY);
    

    【讨论】:

    • 实际上它解决了这种情况,但我需要获得在任何条件下识别这些对象的通用解决方案。另一件事是我需要分别识别这些对象,并且还需要获取这些对象的 x,y 坐标。
    • 您能告诉我如何获取提取对象的 x,y 坐标作为您的解决方案吗?
    • 我强烈建议您在询问此类基本问题之前阅读 OpenCV 文档。您必须使用findContours 函数并在此之后找到每个轮廓的中心。
    【解决方案2】:

    模板匹配/模式识别适用于此。但是,据我所知,openCV 的模板匹配不使用缩放或旋转。它只是通过在图像上“滑动”模板并寻找最小的差异来找到最可能的位置。 我个人会为此使用 HALCON,但这是一个非常昂贵的程序/包。

    【讨论】:

    • 但是当我尝试使用它时,它并没有给出所有对象的准确结果。它标识了我裁剪以用作模板但未标识其他对象的对象。能否请您提供一些示例代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2012-07-06
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多