2012-05-23 150 views
4

我有一個來自cv2.imread的numpy數組,因此有dtype = np.uint8ndim = 3將numpy數組轉換爲cython指針

我想將它轉換爲Cython unsigned int*以與外部cpp庫一起使用。

我想cdef unsigned int* buff = <unsigned int*>im.data但我得到的錯誤Python objects cannot be cast to pointers of primitive types

我在做什麼錯?

謝謝

+0

這一個可能幫助這些問題的答案:http://stackoverflow.com/q/3046305/222914 –

+2

還要注意的是'np.uint8'是'無符號char',而不是'無符號int'要解決。 –

回答

6

感謝您的意見。

cdef np.ndarray[np.uint32_t, ndim=3, mode = 'c'] np_buff = np.ascontiguousarray(im, dtype = np.uint32) 
cdef unsigned int* im_buff = <unsigned int*> np_buff.data 
+1

你應該使用'np.uint'而不是'np.uint32'('unsigned int'可能在某些系統上是64位的)。 – jfs

+1

根據https://github.com/cython/cython/wiki/tutorials-NumpyPointerToC,&np_buff [0,0,0]會比 np_buff.data更好 –