[英]Passing an image from C++ to Python 3.4
我正在使用嵌入在C ++程序中的Python解釋器來生成報告。 作為報告的一部分,Python腳本從C ++程序中獲取圖像數據並從中構建PIL
圖像,如下所示:
width = getImageWidth ()
height = getImageHeight ()
pixels = getImagePixels ()
pilTile = Image.frombuffer ('RGB',
(width, height),
pixels,
'raw',
'RGB',
0,
-1)
在C ++方面,我一直使用Boost.Python
將圖像像素作為緩沖區返回:
object getImagePixels ()
{
GLubyte *buf = getImage () ;
size_t size = getSize () ;
object obj = object ((handle<>(borrowed (PyBuffer_FromMemory (
(char *) buf, size, PyBUF_READ))))) ;
return obj ;
}
問題是,Python 3.x消除了PyBuffer_FromMemory
接口。 我嘗試用PyMemoryView_FromMemory
替換它,但PIL
似乎無法使用內存視圖。
在這里替換PyBuffer_FromMemory
的最佳方法是什么?
謝謝你的幫助!
這有點圓,但如果你有numpy你可以做
#include <numpy/arrayobject.h>
...
PyObject* pyArray = PyArray_SimpleNewFromData(1, size, NPY_BYTE, (void*)buf));
( 文件 )
我不是100%關於Boost.Python是如何工作的,但是看了一下docs, handle
保存了從PyObject
派生的東西,所以它應該可行。
它也可以直接返回numpy數組並使用Image.fromarray()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.