簡體   English   中英

SWIG Python C ++輸出數組給出“未知類型”錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM