2013-03-09 128 views
4

我想将使用PIL加载的图像转换为Cimg图像对象。我知道Cimg是一个C++库,PIL是一个python图像库。给定一个图像URL,我的目标是计算图像的pHash而不写入磁盘。 pHash模块与Cimg image object协同工作,并已在C++中实施。所以我打算将所需的图像数据从我的python程序发送到使用python扩展绑定的C++程序。在下面的代码sniplet,我从给定的URL加载图像:将使用PIL加载的图像转换为Cimg图像对象

//python code sniplet 
import PIL.Image as pil 

file = StringIO(urlopen(url).read()) 
img = pil.open(file).convert("RGB") 

的CIMG图像对象,我需要构造如下所示:

CImg (const t *const values, 
    const unsigned int size_x, 
    const unsigned int size_y = 1, 
    const unsigned int size_z = 1, 
    const unsigned int size_c = 1, 
    const bool is_shared = false 
) 

我可以得到的宽度(size_x )和高度(size_y)使用img.size并可以传递给C++。我不确定如何填充Cimg对象的“值”字段?用什么样的数据结构将图像数据从python传递到C++代码?

此外,是否有任何其他方式将PIL图像转换为Cimg?

回答

0

我假设你的主应用程序是用Python编写的,你想从Python调用C++代码。你可以通过创建一个“Python module”来实现这个功能,它将向Python公开所有本地C/C++功能。您可以使用像SWIG这样的工具让您的工作更轻松。

这是我脑海中出现问题的最佳解决方案。

+0

感谢您的回复。我一直在尝试使用你提到的python扩展模块。我不确定要为图像数据传递什么。我的问题的第二部分是“我不确定如何填充Cimg对象的”值“字段”。我可以直接将我下载的图像数据直接用于Cimg结构中的'value'变量吗? – 2013-03-11 05:12:24