[英]SWIG Python C++ output array giving 'unknown type' error
我正在嘗試使用Swig包裝一些C ++代碼以將numpy數組傳遞回python。 我正在跟蹤一些我在網上看到的使用numpy.i的示例。 這是我的代碼的樣子。
我將其用作類頭文件中的函數定義:
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)
運行此命令時,出現以下錯誤:
追溯(最近一次通話最后一次):在grab.grabFrame(buf)中的文件“ OV4682FrameGrabberTest.py”,第44行,在grabFrame def handleFrame中的文件“ /home/ubuntu/rgb_ir_frame_grabber/build/lib/OV4682Interface.py”,第117行(self,* args):返回_OV4682Interface.OV4682FrameGrabber_grabFrame(self,* args)TypeError:預期為Int尺寸。 給出“未知類型”。
由於某種原因,我收到一個錯誤消息,說傳入的數組的類型未知,但是我已將dtype顯式設置為np.uint8。 我想知道是否有人可以指出我在這里做錯的事情,因為我有些困惑。
看來我對這篇文章的答案不夠仔細( SWIG + c + Python:傳遞和接收c數組 )。 我沒有注意到swig將輸出數組添加到返回列表中,只是想要傳入的數組大小。
我將方法定義更改為:
void grabFrame(int buf_size, unsigned char *buf);
我將python調用更改為:
buf = grab.grabFrame(np.shape(buf)[0])
現在可以正常工作並返回我想要的數據數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.