将numpy.ndarray转换为opencv cv :: Mat

时间:2016-01-16 20:15:16

标签: python c++ opencv numpy boost-python

我有C ++ OpenCv的Boost-Python接口。当我从python调用C ++方法时,我收到此错误:

Boost.Python.ArgumentError: Python argument types in
    Vision.process(Vision, numpy.ndarray, numpy.ndarray)
did not match C++ signature:
    process(python::vision::PythonVision {lvalue}, cv::Mat {lvalue}, cv::Mat {lvalue})

我正在使用python cv2.so模块。如何将numpy.ndarray转换为cv :: mat?

1 个答案:

答案 0 :(得分:1)

我使用了以下项目:https://github.com/Algomorph/pyboostcvconverter并静态链接到它。

注意(为避免分段错误):

1)应该在调用import_array的地方定义PY_ARRAY_UNIQUE_SYMBOL 在其他包含的地方,使用NO_IMPORT_ARRAY

#define PY_ARRAY_UNIQUE_SYMBOL PYVISION_ARRAY_API
#include <pyboostcvconverter/pyboostcvconverter.hpp>

2)从BOOST_PYTHON_MODULE

调用init_ar
/**
 * @brief Initialize Numpy Array
 */
static void init_ar( )
{
    // initialize
    Py_Initialize();

    // defined in numpy
    import_array();
}