2016-09-14 65 views
0

我想用swig來包裝一些C++代碼來將numpy數組傳回python。我在網上看到一些使用numpy.i的例子。這是我的代碼的樣子。SWIG提供'未知類型'錯誤的Python C++輸出數組

我用這作爲我的類的頭文件中的函數定義:

bool grabFrame(int buf_size, unsigned char *buf); 

在我的接口文件我有:

/* File : OV4682Interface.i */ 
%module OV4682Interface 
%include "std_string.i" 

%{ 
    #define SWIG_FILE_WITH_INIT 
    #include "OV4682FrameGrabber.h" 
%} 

%include "numpy.i" 
%init %{ 
    import_array(); 
%} 

%apply (int DIM1, unsigned char* ARGOUT_ARRAY1) {(int buf_size, unsigned char *buf)}; 

%include "../inc/OV4682FrameGrabber.h" 

我的Python代碼如下所示:

import numpy as np 
import OV4682Interface as ov 

width = 672 
height = 380 
buf_size = width*height*2 

buf = np.zeros(buf_size, dtype=np.uint8) 

grab = ov.OV4682FrameGrabber() 
grab.grabFrame(buf) 

當我運行這個時,我得到以下錯誤:

回溯(最近通話最後一個): 文件 「OV4682FrameGrabberTest.py」,第44行,在 grab.grabFrame(BUF) 文件 「/home/ubuntu/rgb_ir_frame_grabber/build/lib/OV4682Interface.py」,行117 ,在grabFrame def grabFrame(self,* args):return _OV4682Interface.OV4682FrameGrabber_grabFrame(self,* args) TypeError:預計的Int維數。 '未知類型'給出。

出於某種原因,我得到一個錯誤,說傳入的數組中的類型是未知的,但我已明確地將dtype設置爲np.uint8。我想知道是否有人能指出我在這裏做錯了什麼,因爲我有點難倒。

回答

0

看起來我沒有仔細看這篇文章的答案(SWIG+c+Python: Passing and receiving c arrays)。我沒有注意到痛飲將輸出數組返回列表,只是想傳遞的數組的大小

我改變了方法定義的:。

void grabFrame(int buf_size, unsigned char *buf); 

,我改變了蟒蛇通話是這樣的:

buf = grab.grabFrame(np.shape(buf)[0]) 

這現在工作並返回我想要的數據數組。