包装Python的C ++ OpenCV代码

时间:2012-06-11 08:11:21

标签: c++ python opencv numpy swig

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

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

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

2 个答案:

答案 0 :(得分:1)

不知道代码复杂性,各种C ++代码及其风格......我建议“Extending Python

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

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

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

答案 1 :(得分:1)

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

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

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