【问题标题】:OpenCV and Computer Vision, where do we stand now?OpenCV 和计算机视觉,我们现在处于什么位置?
【发布时间】:2012-01-11 08:45:52
【问题描述】:

我想做一个涉及计算机视觉的项目。主要是物体检测/识别。经过一番研究,我不断回到 OpenCV。但是所有的教程都是从 2008 年开始的(我想当时它有点大)。它显然不能在 Mac 上的 Python 中编译。我正在使用 Xcode 中的 C++ 框架,但是没有一个教程可以工作,因为它们已经过时了,而且我可以解析的文档很烂。

对于我正在做的事情是否有更好的解决方案,是否有人对学习如何使用 OpenCV 有任何建议?

谢谢

【问题讨论】:

  • 试试 O'Reilly 的 OpenCV 书?
  • 发布时间:2008 年 9 月 -- 抱歉,08 年的每个教程都不起作用。我相信从那时起这个框架已经发生了很大的变化。从该页面上的评论来看:“当时这本书很好,但随着 opencv 的发展不再适用。他们应该更新他们的书。”
  • 查看 OpenCV 源代码中的示例。
  • 我不推荐Python接口。我在尝试用它做非常简单的事情时遇到了多个问题。出于同样的原因,我也不推荐用于 Windows 的 C++ 接口。这就是我在 v2.3.1 之前对 OpenCV 的看法(虽然我还没有尝试过最新的)。适用于 Linux 和 Mac 的 C/C++ 接口运行良好。在 Mac 上,我使用命令行来编译我的应用程序。 g++ source.cpp -o source `pkg-config --cflags --libs opencv`
  • 如果你能忍受它然后使用 C API。在 Windows 和 Linux 上使用它。除了一些笨拙的函数名称之外,它还可以工作。您可以放心地阅读 O Rielly 的书。

标签: opencv computer-vision object-detection


【解决方案1】:

想到的最简单的答案是阅读示例代码并稍微了解一下,并尝试您的想法是否有效。 api 确实发生了变化,并且大多数教程都是为 OpenCV 的第一个版本编写的,看起来没有人费心重写它们。然而,它背后的核心思想并没有改变。因此,如果您找到回答您的问题的教程,但使用旧 API 编写,只需查看文档以了解已使用函数的现代替换。这并不容易和快速,但看起来很有效。如果您使用最新(实际上是 2.3)版本,我建议同时使用2.1 documntation 2.3 docs + tutorials 。您还应该查看应该与库一起安装的示例。有很多关于如何使用文档中未提及的结构和技巧的提示。最后,不要害怕查看库本身的代码(如果您自己编译它)。不幸的是,这是我知道的唯一来源,例如检查哪些代码对应于哪种类型的Mat 对象。

【讨论】:

    【解决方案2】:

    让我补充几点。首先,我可以向您保证,OpenCV 的 Python 绑定可以在 Mac 上运行。我每天都在使用它们。

    很多人喜欢 OpenCV 的原因有很多:

    1. 许可证很好,适合集成到商业产品等中。
    2. 从技术角度来看,它非常好。它为您提供了最先进算法的参考实现。
    3. 与其他替代方案相比,它的速度往往相当快(我在看你的 Matlab)。

    就像生活中的一切一样,它并不完美:

    1. 这是一个很好的例子,说明软件库是一个移动的目标。 我有一个使用 OpenCV 的 300 行 python 程序,每隔几个 发布新版本的 OpenCV 几个月后,我必须更改它 以适应新的函数名称/调用约定等。 图书馆确实进步了很多,但是不得不改变是很痛苦的 每年 3 次相同的计划。
    2. 它有一个学习曲线,就像计算机视觉本身一样, 技术性强,不易学。

    还有其他选择(有其他优点和缺点)带有图像处理工具箱的 MATLAB 就是这样一个例子。

    【讨论】:

      【解决方案3】:

      我在开始使用 OpenCV 时遇到了类似的问题,根据我的经验,这实际上是学习它的最大障碍。这对我有用:

      1. 本书:“OpenCV 2 计算机视觉应用程序编程手册”。这是最新一本书,并提供了有关如何解决不同计算机视觉问题的示例(您可以在亚马逊上使用“Look Inside!”查看目录)。它确实帮助我轻松进入 OpenCV 并熟悉该库的工作方式。

      2. 正如其他人所说,这些示例非常有帮助。对于本书跳过或仅简要介绍的内容,您通常可以在查看示例时找到更详细的示例。您还可以在本书和示例之间找到解决相同问题的不同方法。例如,对于查找关键点/特征,本书展示了一个使用 FAST 特征的示例:

        vector<KeyPoint> keypoints;
        FastFeatureDetector fast(40);
        fast.detect(image, keypoints);

        但在示例中,您会发现一种更灵活的方法(如果您想选择使用哪种关键点检测算法):

        vector<KeyPoint> keypoints;
        Ptr<FeatureDetector> featureDetector = FeatureDetector::create("FAST");
        featureDetector->detect(image, keypoints);

      根据我的经验,事情最终会开始点击,对于更具体的问题,您会开始在博客上或在 StackOverflow 上查找最新信息。

      【讨论】:

        猜你喜欢
        • 2017-08-26
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2013-09-29
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多