我想用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。我想知道是否有人能指出我在這裏做錯了什麼,因爲我有點難倒。