Вызов функции C ++ из Python по ссылке - PullRequest
1 голос
/ 11 марта 2012

Я успешно завернул свой код C ++ с помощью SWIG, и он отлично загружается в Python. Я использую библиотеку Olena для обработки изображений .

Однако я не знаю, как вызывать мои функции, для которых требуется указатель на изображение!

Например, моя функция удаления изображения прототипирована следующим образом:

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 Ответ

3 голосов
/ 15 марта 2012

Я проверил со своим профессором в университете, и мы решили, что было бы лучше реализовать функцию, которая возвращала бы указатель на изображение, когда оно было загружено, и объявили его глобальным:

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);

}

Что вы думаете об этом?

...