我想利用python.ctypes将图像numpy传输到C ++函数中。但是C ++函数的输入与该图像numpy并不完全相同。特定的数据转换:numpy.float32-numpy.uint8 --ctypes.Pointer(ctypes.c_ubyte)。 代码:
color_in = np.asarray(color,dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
然后我打印color_in.contents,它显示“ c_ubyte(144)”,而color [0,0,0] = 92.0。值已更改。似乎numpy.float32没有成功转换为numpy.uint8。我很困惑。
然后我将代码分成两行,如下所示。
color_wb = np.asarray(color,dtype=np.uint8)
color_in = color_wb.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))
'print(color_in.contents)'的结果是'c_ubyte(92)'。
然后,我尝试了一些测试。
a = np.asarray(color[0:2,0:2,:],dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
print(a.contents)
b = np.asarray(color[0,:,:],dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
print(b.contents)
b = np.asarray(color[:,0,:],dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
print(b.contents)
c = np.asarray(color[:,:,0],dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
print(c.contents)
d = np.asarray(color[:,:,:],dtype=np.uint8).ctypes.data_as(ctypes.POINTER(ctypes.c_uint8))
print(d.contents)
结果是:
>>>c_ubyte(92)
c_ubyte(92)
c_ubyte(92)
c_ubyte(192)
c_ubyte(144)
如果我先把这个矩阵的两个维度都考虑进去,那么np.asarray(matrix,dtype = xx)将不起作用。我很困惑。
===============================
python版本:python2.7