我正在进行一些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
但显然这涉及复制数据,所以我仍然想找到另一种方法来做到这一点。
答案 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,))