diff --git a/modules/core/misc/python/pyopencv_umat.hpp b/modules/core/misc/python/pyopencv_umat.hpp index 63f002503b..2e91cd5c65 100644 --- a/modules/core/misc/python/pyopencv_umat.hpp +++ b/modules/core/misc/python/pyopencv_umat.hpp @@ -28,7 +28,7 @@ static void* cv_UMat_context() static Mat cv_UMat_get(const UMat* _self) { Mat m; - m.allocator = &g_numpyAllocator; + m.allocator = &GetNumpyAllocator(); _self->copyTo(m); return m; } diff --git a/modules/python/src2/cv2_convert.cpp b/modules/python/src2/cv2_convert.cpp index 113bff09a8..35766b47c9 100644 --- a/modules/python/src2/cv2_convert.cpp +++ b/modules/python/src2/cv2_convert.cpp @@ -56,7 +56,7 @@ bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo& info) if(!o || o == Py_None) { if( !m.data ) - m.allocator = &g_numpyAllocator; + m.allocator = &GetNumpyAllocator(); return true; } @@ -298,14 +298,14 @@ bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo& info) #endif m = Mat(ndims, size, type, PyArray_DATA(oarr), step); - m.u = g_numpyAllocator.allocate(o, ndims, size, type, step); + m.u = GetNumpyAllocator().allocate(o, ndims, size, type, step); m.addref(); if( !needcopy ) { Py_INCREF(o); } - m.allocator = &g_numpyAllocator; + m.allocator = &GetNumpyAllocator(); return true; } @@ -316,9 +316,9 @@ PyObject* pyopencv_from(const cv::Mat& m) if( !m.data ) Py_RETURN_NONE; cv::Mat temp, *p = (cv::Mat*)&m; - if(!p->u || p->allocator != &g_numpyAllocator) + if(!p->u || p->allocator != &GetNumpyAllocator()) { - temp.allocator = &g_numpyAllocator; + temp.allocator = &GetNumpyAllocator(); ERRWRAP2(m.copyTo(temp)); p = &temp; } diff --git a/modules/python/src2/cv2_numpy.cpp b/modules/python/src2/cv2_numpy.cpp index 63010b6026..25922d6c61 100644 --- a/modules/python/src2/cv2_numpy.cpp +++ b/modules/python/src2/cv2_numpy.cpp @@ -6,8 +6,6 @@ #include "cv2_numpy.hpp" #include "cv2_util.hpp" -NumpyAllocator g_numpyAllocator; - using namespace cv; UMatData* NumpyAllocator::allocate(PyObject* o, int dims, const int* sizes, int type, size_t* step) const diff --git a/modules/python/src2/cv2_numpy.hpp b/modules/python/src2/cv2_numpy.hpp index 934333921d..b37a7a878e 100644 --- a/modules/python/src2/cv2_numpy.hpp +++ b/modules/python/src2/cv2_numpy.hpp @@ -18,7 +18,7 @@ public: const cv::MatAllocator* stdAllocator; }; -extern NumpyAllocator g_numpyAllocator; +inline NumpyAllocator& GetNumpyAllocator() {static NumpyAllocator gNumpyAllocator;return gNumpyAllocator;} //======================================================================================================================