Cython을 사용하여 일부 OpenCV 형식을 매개 변수로 사용하는 C++ 클래스를 래핑하려고합니다. 그런 다음이 래핑 된 클래스를 Python에서 사용하려고합니다. 는 C++ 클래스의 단순화 된 버전 보이는 같은 :Cython을 사용하여 OpenCV 형식을 매개 변수로 사용하는 C++ 클래스 래핑
Vec3d 같이 OpenCV의에 정의되어
#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();
}
}
"transform.h"
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 wrapper에 대한 첫 번째 시도는 다음과 같습니다.
"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++ 클래스를 어떻게 포장 할 수 있습니까? 이 코드 조각에 다른 문제가있을 것으로 생각됩니다. 언제든지 알려주십시오.