2

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

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

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

4

2 回答 2

1

在不了解代码复杂性、各种 C++ 代码及其风格的情况下……我会推荐“扩展 Python

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

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

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

于 2012-06-11T08:19:27.040 回答
1

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

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

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

于 2012-06-11T08:29:36.780 回答