将指针转换为无符号字符数组到Numpy数组

时间:2016-06-03 14:05:12

标签: arrays numpy cython data-conversion wrapping

我正在进行一些Cython包装,并且我需要将指向无符号字符数组的指针转换为numpy数组。我尝试过的方法都没有奏效。此外,如果可能的话,我更愿意在没有实际复制数据的情况下这样做。

这是我一直在搞乱的问题。

def getImage(self):
    cdef int size = self.c_cam.getResolution()[0]*self.c_cam.getResolution()[1]*3

    return np.ctypeslib.as_array(self.c_cam.getImage(), shape=size*sizeof(unsigned char))

self.c_cam.getImage()返回指向数据数组的指针(存储为c_cam类的成员) 但是,这会抛出

AttributeError: 'str' object has no attribute '__array_interface__'
跑步时

虽然坦率地说我不知道​​它是如何工作的,因为没有任何迹象表明数据类型。

修改 所以我至少得到了以下工作

    cdef unsigned char* data = self.c_cam.getImage()
    dest = np.empty(size)
    for i in range(0,size):
        dest[i] = <int> data[i]
    return dest

但显然这涉及复制数据,所以我仍然想找到另一种方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

我相信我有一个避免复制的答案

import ctypes as c
from libc.stdint cimport uintptr_t[1]*3
data = <uintptr_t>self.c_cam.getImage()     
data_ptr = c.cast(data, c.POINTER(c.c_uint8))
array = np.ctypeslib.as_array(data_ptr, shape=(SIZE,))