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

Convert Pointer to Array of Unsigned Chars to Numpy Array

我正在做一些 Cython 包装,结果发现我需要将指向无符号字符数组的指针转换为 numpy 数组。 None 我试过的方法都奏效了。另外,如果可能的话,我更愿意在不实际复制数据的情况下这样做。

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

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() returns指向数据数组的指针(存储为c_camclass的成员) 然而,这会抛出

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

但显然这涉及复制数据,所以我仍然想找到另一种方法来执行此操作。

我相信我得到了避免复制的答案

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,))