gpt4 book ai didi

python - 为使用 Opencv 2.3 的算法创建 Python 包装器

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:15 25 4
gpt4 key购买 nike

我正在寻找一个 c++ 类,它实现了我使用 Opencv 2.3 编写的算法。我知道整个 opencv 都有 python 包装器,但我需要的是包装我自己的使用 opencv 的代码。这似乎是合乎逻辑的,因为我的算法的较低级别将是快速编译的 c++ 代码,我可以自由地从 python 调用它并围绕它构建一个系统。

我的类其实很简单,主要有4个方法:

  void train( std::vector<cv::Mat> );
void save();
void load();
bool detect( cv::Mat );

这基本上是我需要包装的大部分内容。问题是我不知道如何最好地解决这个问题。我研究了 ctypes、swig、boost python 和 pyplusplus。到目前为止,我还没有成功完成上述任何一项。

我一直遇到有关如何包装 opencv 对象 cv::Mat 的问题。在 python 中,我将使用 numpy 数组,所以我知道我需要从 numpy 数组到 cv::Mat 的转换代码,我必须注册它。

我觉得其他人一定曾经尝试过这样的事情,如果你能帮助我,我将不胜感激


重申一下目标:将使用 opencv 的 c++ 类包装到 python 库中,以便我可以使用 python 中的算法。

我想我已经对转换有所了解(在 opencv 源的帮助下),但我仍然无法从 python 工作。

好吧,我一直在使用上面帖子中链接的代码(从 numpy 到 cv::Mat 的转换),但我仍然遇到问题。我将发布我的代码,希望比我更有知识的人可以在这里帮助我。

例如这是一个简单的类:

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 和上述链接中的一些代码来包装此类的地方:

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 函数来自 pano_cv 库,但通过使用官方 opencv 源代码,我知道该函数在某种程度上也存在。完整文件的功能低于我上面写的。这段代码用 bjam 编译得很好,但是当我导入 python 时它崩溃了。错误是这样的:libFoo.so: undefined symbol: _ZN2cv3Mat10deallocateEv。我尝试了很多不同的东西,但我无法让它工作。

非常感谢您的帮助。

最佳答案

我在谷歌上找到了一些代码,使用 boost::python 在 C++ 中将 numpy 数组转换为 cv::mat: link

关于python - 为使用 Opencv 2.3 的算法创建 Python 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com