【问题标题】:OpenCV::matchShapes() example?OpenCV::matchShapes() 示例?
【发布时间】:2012-07-31 08:02:12
【问题描述】:

我想使用matchShapes() 函数在查询图像中查找对象。

假设我有一本书的模型图像,我想提取它的形状,然后尝试在另一个图像中找到这本书(它的形状)。

我在 Google 上搜索了很多,但找不到任何关于如何使用 matchShapes 来实现此目的的真实示例。缺乏文档。有人可以用 C++ 做一个小例子吗?

非常感谢! (注意我知道我可以使用 SIFT/ORB 等,但我想使用 matchShapes())

【问题讨论】:

    标签: opencv object-detection


    【解决方案1】:

    第一步:检测书的轮廓并将其存储在vector<Point>中。

    第 2 步:检测另一张图像上的轮廓。

    第 3 步:迭代检测到的轮廓,并将第 1 步中检测到的形状与在另一个图像上检测到的每个轮廓相匹配。您已检测到vector<vector<Point> > 轮廓。遍历它们,您将模型 vector<Point> 从步骤 1 和 vector<Point> 从轮廓传递到 matchShape() 函数。看我的回答herematchShape()函数的使用方法。

    请注意,书籍在其他图像上的形状必须与模型图像上的形状相同。它只能旋转、位移或缩放。

    【讨论】:

    • 是和不是。您可以使用 OpenCV findContour 或例如编写您自己的轮廓提取函数,让我们从 Canny 输出中说。正如文档所说,输入可以是轮廓或灰度图像,matchShapes() 函数基于 Hu 不变矩。所以你并不严格将它与轮廓一起使用。但在您的情况和大多数情况下,它与轮廓一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2010-09-25
    • 2016-01-21
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多