Я пытаюсь создать библиотеку python из класса, который использует opencv 2.3.Я хочу иметь возможность передавать массивы numpy в класс, где они будут преобразованы в обработанные cv :: Mat, затем преобразованы обратно в массивы numpy и возвращены.
Вот простой тестовый класс, над которым я работаю, чтобы получитьэто работает, прежде чем обернуть мой собственный класс.В настоящее время я просто пытаюсь получить концерт массива в cv :: Mat, обработать его и затем записать в файл.После того, как это сработает, я буду возвращать обработанный массив в python.
Вот простой класс:
foo.h:
#include <opencv2/core/core.hpp>
class Foo {
public:
Foo();
~Foo();
cv::Mat image;
void bar( cv::Mat in );
};
foo.cpp:
#include "foo.h"
Foo::Foo(){}
Foo::~Foo(){}
void Foo::bar( cv::Mat in) {
image = in;
cv::Canny( image, image, 50, 100 );
cv::imwrite("image.png", image);
}
И вот здесь я попытался обернуть этот класс с помощью boost :: python (я использую код из исходного кода opencv для преобразования numpy в mat)
wrap_foo.cpp
#include <boost/python.hpp>
#include <numpy/arrayobject.h>
#include <opencv2/core/core.hpp>
#include "foo.h"
using namespace cv;
namespace bp = boost::python;
//// Wrapper Functions
void bar(Foo& f, bp::object np);
//// Converter Functions
cv::Mat convertNumpy2Mat(bp::object np);
//// Wrapper Functions
void bar(Foo& f, bp::object np)
{
Mat img = convertNumpy2Mat(np);
f.bar(img);
return;
}
//// Boost Python Class
BOOST_PYTHON_MODULE(lib)
{
bp::class_<Foo>("Foo")
.def("bar", bar)
;
}
//// Converters
cv::Mat convertNumpy2Mat(bp::object np)
{
Mat m;
numpy_to_mat(np.ptr(),m);
return m;
}
Функция numpy_to_mat из источника opencv (modules / python / src2 / cv2.cpp).Полный файл имеет функцию ниже того, что я написал выше.Этот код прекрасно компилируется с bjam, но когда я импортирую в python, он вылетает.Ошибка заключается в следующем: libFoo.so: неопределенный символ: _ZN2cv3Mat10deallocateEv.Я пробовал несколько разных вещей, но я не могу заставить это работать.
Помощь очень ценится.