[英]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.