【问题标题】:Wrapping C++ OpenCV code for Python为 Python 包装 C++ OpenCV 代码
【发布时间】:2012-06-14 03:26:14
【问题描述】:

我有一个用 Python 编写的演示应用程序。它使用大量现有的 C++ 代码(由我编写),这些代码依赖于 OpenCV 进行图像处理。目前,Python 和 C++ 之间的通信是通过文件 I/O 和子进程调用来完成的,效率不高。包装 C++ 代码以便可以从 Python 调用的最佳方法是什么?

有太多的 C++ 代码需要考虑将其移植到 Python,所以这不是一个真正的选择。

很久以前,Python OpenCV 包装器是用 SWIG 编写的,但看起来最新版本的包装器完全不同。谁能指出我正确的方向?

【问题讨论】:

    标签: c++ python opencv numpy swig


    【解决方案1】:

    在不了解代码复杂性、C++ 代码种类和风格的情况下...我会推荐“Extending Python

    这不是一个立竿见影的解决方案(您应该更改 C++ 代码、原型化一些新函数或在 C 中添加一个简单的包装层)。但是,如果你打算做一个复杂的项目(并且也有点担心性能)......这似乎是最好的方法。

    将 C++ 代码移植到 Python 似乎是一种倒退,在 Python 中编写新代码是可以的(我是它的粉丝),但 C++ 会(通常)更有效率。

    编辑:还可以查看ctypes 模块。也许它适合您的需求。如果您更愿意用 python 语言进行包装,那么它可能会更好。如果您不介意使用 C 代码,那么可以通过使用现有代码创建一个模块来扩展 Python。

    【讨论】:

      【解决方案2】:

      有两种方法可以让你的 python 程序直接与你的 C/C++ 程序交互:

      1. 仅使用 C-API 将 C/C++ 代码包装在 DLL 中。然后,使用ctypes 在 DLL 中调用 C 函数。这种方式的优点是您不需要包含/链接任何其他库。

      2. 通过添加新的 python 模块来扩展 python。您可以使用boost python 轻松创建python 模块。这种方式的优点是您不需要将代码包装到 C-API。

      【讨论】:

      • 我硬着头皮用 C++ 重写了演示(主要是 GUI 代码)。不过谢谢你的建议。下次我做这样的事情时,我会检查 boost python。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多