通过引用从Python调用C ++函数

时间:2012-03-11 00:57:29

标签: c++ python swig

我已经使用SWIG成功包装了我的C ++代码,它可以很好地加载到Python中。我使用的是Olena library for image processing

但是,我不知道如何调用需要指向图像的指针的函数!

例如,我的侵蚀图像的功能原型如下:

mln::image2d<mln::value::int_u8> imErossion(
    const mln::image2d<mln::value::int_u8> *img, int size, int nbh
);

在Python中运行我的代码的结果:

    from swilena import *
    from algol import *

    image = image2d_int_u8
    ima = image.load("micro24_20060309_grad_mod.pgm")

    eroded_ima = imErossion(ima,1,8) 
    >>>> Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: in method 'imErossion', argument 1 of type 
       'mln::image2d<mln::value::int_u8 > const *'

我一直在网上寻找尝试自己解决这个问题,但它变得比我预期的更难。

我不确定如何从Python传递指针 - 相当于这个C ++代码:

eroded_ima = imErossion(&ima,1,8)

1 个答案:

答案 0 :(得分:3)

我和我的大学教授一起检查过,我们决定最好实现一个函数,当这个函数被加载并声明为全局时会返回指针:

mln::image2d<mln::value::int_u8> working_img;

mln::image2d<mln::value::int_u8> *imLoad(const std::string path){
    mln::io::pgm::load(working_img, path);
    return &working_img;
}

void imSave(const std::string path){

    mln::io::pgm::save(working_img, path);

}

您如何看待这个?