2012-06-11 66 views
1

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

有太多的C++代码去想它移植到Python,所以这不是一个真正的选择。

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

回答

1

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

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

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

+0

我咬紧牙关,重写了C++中的演示(主要是GUI代码)。不过谢谢你的建议。下次我做这样的事时,我会检查boost python。 – misha

1

不知道代码的复杂性,不同的C++代码和它的风格。我会建议“Extending Python

这不是一个立即解决(你应该改变的C++代码,试制了一些新的功能或增加简单的包装层在C)。但是,如果你打算做一个复杂的项目(并且对性能也有点担心)......这似乎是最好的方式。

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

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