繁体   English   中英

将图像从C ++传递到Python 3.4

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM