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 で複数の値のテンプレートを使用できると思いますか? そうでなければ、これらの OpenCV のテンプレート型を使用する C++ クラスを Cython でラップするにはどうすればよいでしょうか? このコードには他にも問題があるのではないかと思います。遠慮なく指摘してください。