簡體   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