message: python: move Ptr specializations above generic_vec to allow vector_Ptr_T
diff: @@ -394,6 +394,15 @@ bool pyopencv_to(PyObject* o, Mat& m, const char* name)
  return pyopencv_to(o, m, ArgInfo(name, 0));
  }
  +template <typename T>
  +bool pyopencv_to(PyObject *o, Ptr<T>& p, const char *name)
  +{
  + if (!o || o == Py_None)
  + return true;
  + p = makePtr<T>();
  + return pyopencv_to(o, *p, name);
  +}
  +
  template<>
  PyObject* pyopencv_from(const Mat& m)
  {
  @@ -417,6 +426,14 @@ PyObject* pyopencv_from(const Matx<_Tp, m, n>& matx)
  return pyopencv_from(Mat(matx));
  }
  +template<typename T>
  +PyObject* pyopencv_from(const cv::Ptr<T>& p)
  +{
  + if (!p)
  + Py_RETURN_NONE;
  + return pyopencv_from(*p);
  +}
  +
  typedef struct {
  PyObject_HEAD
  UMat* um;
  @@ -1329,23 +1346,6 @@ PyObject* pyopencv_from(const Moments& m)
  "nu30", m.nu30, "nu21", m.nu21, "nu12", m.nu12, "nu03", m.nu03);
  }
  -template<typename T>
  -PyObject* pyopencv_from(const cv::Ptr<T>& p)
  -{
  - if (!p)
  - Py_RETURN_NONE;
  - return pyopencv_from(*p);
  -}
  -
  -template <typename T>
  -bool pyopencv_to(PyObject *o, Ptr<T>& p, const char *name)
  -{
  - if (!o || o == Py_None)
  - return true;
  - p = makePtr<T>();
  - return pyopencv_to(o, *p, name);
  -}
  -
  #include "pyopencv_custom_headers.h"
  static void OnMouse(int event, int x, int y, int flags, void* param)
  