2013-03-09 40 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