我正在尝试使用 Cython 包装一个使用某些 OpenCV 类型作为参数的 C++ 类,然后我打算使用 Python 中的这个包装类。C++ 类的简化版本如下所示:
“转换.h”
#include "opencv2/core/core.hpp"
namespace geom
{
class Transform
{
public:
Transform(cv::Vec3d &euler, cv::Vec3d &t);
void set_euler(cv::Vec3d &euler);
cv::Vec3d get_euler();
}
}
Vec3d 在 OpenCV 中定义为:
template<typename _Tp, int n> class Vec : public Matx<_Tp, n, 1> {...};
typedef Vec<double, 3> Vec3d;
Matx 定义为:
template<typename _Tp, int m, int n> class Matx {...};
我对 cython 包装器的第一次尝试如下所示:
“geom_gateway.pyx”
cdef extern from "opencv2/core/core.hpp" namespace "cv":
cdef cppclass Matx[_Tp, int m, int n]:
Matx()
Matx(_Tp v0, _Tp v1, _Tp v2)
cdef extern from "opencv2/core/core.hpp" namespace "cv":
cdef cppclass Vec[_Tp, int n](Matx[_Tp, n, 1]):
Vec()
Vec(_Tp v0, _Tp v1, _Tp v2)
ctypedef Vec<double, 3> Vec3d
cdef extern from "transform.h" namespace "geom":
cdef cppclass Transform:
Transform(cv::Vec3d &euler, cv::Vec3d &t)
void set_euler(cv::Vec3d &euler)
cv::Vec3d get_euler()
这个包装器尚未完成,但我只是想构建它并检查我的语法是否正确。不幸的是,当我构建它时,我并没有走得太远,我得到:
cdef extern from "opencv2/core/core.hpp" namespace "cv":
cdef cppclass Matx[_Tp, int m, int n]:
^
------------------------------------------------------------
../basics/geom_gateway:3:29: Expected ']', found 'm'
怎么了?我想在 Cython 中可以有多个值模板?否则我怎么能在 Cython 中包装一个使用 OpenCV 中的这些模板类型的 C++ 类?我怀疑我在这段代码中可能还有其他问题,请随时指出。