gpt4 book ai didi

c++ - 使用 OpenCV 触摸和选择对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:51 26 4
gpt4 key购买 nike

我在 iOS Xcode objc 中使用 OpenCV 框架,有没有一种方法可以处理来自摄像机的图像并允许用户触摸屏幕上的对象,然后我们使用 OpenCV 中的一些功能来突出显示它。

这就是我的意思。第一张图片显示了用户可能会在视频源中看到的示例:

enter image description here

然后当他们点击 ipad 的屏幕时,我想使用 OpenCV 特征/对象检测来处理他们点击的区域以突出显示该区域。如果他们点击 ipad,会看起来像这样:

enter image description here

关于如何在 objc OpenCV 中实现这一点有什么想法吗?

我可以很容易地看到我们如何使用 iPad 的训练模板来实现这一点,以使用 OpenCV 算法匹配它,但我想尝试让它动态化,这样用户就可以触摸屏幕上的任何东西,我们将从在那里?

最佳答案

解释:为什么要使用分割方法

根据我的理解,您要解决的任务是对象的分割,不管它们的身份

对象识别方法是一种方法。但它有两个主要缺点:

  1. 它要求您训练一个对象分类器,并收集一个数据集,其中包含您想要识别的大量对象示例。如果您选择采用已经过训练的分类器 - 它不一定适用于您想要检测的任何类型的对象。
  2. 大多数对象识别解决方案会在已识别对象周围找到一个边界框,但不会对其进行完整分割。 segmentation 部分需要额外的努力。

因此,我认为最适合您的情况的方法是使用图像分割算法。更准确地说,我们将使用 GrabCut segmentation algorithm .

GrabCut 算法

这是一个包含两个阶段的迭代算法:

  1. 初始阶段 - 用户指定对象周围的边界框。给定这个边界框,算法使用 GMM 估计前景(对象)和背景的颜色分布,然后进行图形切割优化以找到前景和背景之间的最佳边界。

  2. 在下一阶段,如果需要,用户可以通过提供前景和背景的涂鸦来更正分割。该算法相应地修复模型并根据更新的信息执行新的分割。

使用这种方法有利也有弊。优点:

  1. 使用 openCV 很容易实现分割算法。
  2. 它使用户能够在需要时修复段错误。
  3. 它不依赖于收集数据集和训练分类器。

主要缺点是除了单击屏幕外,您还需要来自用户的额外信息源。此信息将是对象周围的边界框,在某些情况下 - 需要额外的涂鸦来纠正分割。

代码

幸运的是,在 OpenCV 中有这个算法的实现。用户 Itseez 为使用 OpenCV 的 GrabCut 算法创建一个简单易用的示例,可在此处找到:https://github.com/Itseez/opencv/blob/master/samples/cpp/grabcut.cpp

应用程序使用:

应用程序接收图像文件的路径作为命令行参数输入。它将图像渲染到屏幕上,用户需要提供一个初始边界矩形。

用户可以按“n”来执行当前迭代的分割,或者按“r”来恢复他的操作。

选择一个rect后,分割就计算出来了。如果用户想要更正它,他可以通过相应地按 shift+left 和 Ctrl+left 来选择添加前景或背景涂鸦。

例子

分割 iPod:

enter image description here

分割笔:

enter image description here

关于c++ - 使用 OpenCV 触摸和选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37980120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com