From 8a8ba57b20d5764c52acd615a33410092a6f9732 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Wed, 3 Nov 2010 17:57:51 +0000 Subject: [PATCH] fixed building Python wrappers when Numpy is not available --- CMakeLists.txt | 6 +++++- .../features2d/include/opencv2/features2d/features2d.hpp | 8 ++++---- modules/python/cv.cpp | 13 ++++++++++++- modules/python/gen2.py | 2 +- modules/python/opencv2x.h | 7 +++++++ 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8174506..970d053 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1321,7 +1321,11 @@ message(STATUS "") message(STATUS " Interfaces: ") message(STATUS " Python: ${BUILD_NEW_PYTHON_SUPPORT}") message(STATUS " Python interpreter: ${PYTHON_EXECUTABLE}") -message(STATUS " Python numpy: ${PYTHON_USE_NUMPY}") +if (PYTHON_USE_NUMPY) +message(STATUS " Python numpy: YES") +else() +message(STATUS " Python numpy: NO (Python interface will not cover OpenCV 2.x API)") +endif() if(IPP_FOUND AND USE_IPP) message(STATUS " Use IPP: ${IPP_PATH}") diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index ca4ad05..0b4350e 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -1400,8 +1400,8 @@ public: virtual void detect( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; // todo read/write - virtual void read( const FileNode& fn ) {} - virtual void write( FileStorage& fs ) const {} + virtual void read( const FileNode& ) {} + virtual void write( FileStorage& ) const {} protected: Ptr detector; @@ -1421,8 +1421,8 @@ public: virtual void detect( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; // todo read/write - virtual void read( const FileNode& fn ) {} - virtual void write( FileStorage& fs ) const {} + virtual void read( const FileNode& ) {} + virtual void write( FileStorage& ) const {} protected: Ptr detector; diff --git a/modules/python/cv.cpp b/modules/python/cv.cpp index 23a56a1..f4f3e4c 100644 --- a/modules/python/cv.cpp +++ b/modules/python/cv.cpp @@ -1860,7 +1860,7 @@ static int convert_to_floats(PyObject *o, floats *dst, const char *name = "no_na } else if (PyNumber_Check(o)) { dst->count = 1; dst->f = new float[1]; - dst->f[0] = PyFloat_AsDouble(o); + dst->f[0] = (float)PyFloat_AsDouble(o); } else { return failmsg("Expected list of floats, or float for argument '%s'", name); } @@ -3847,9 +3847,11 @@ static int zero = 0; #include "generated0.i" +#if PYTHON_USE_NUMPY #include "opencv2x.h" #include "pyopencv_generated_types.h" #include "pyopencv_generated_funcs.h" +#endif static PyMethodDef methods[] = { @@ -3865,7 +3867,10 @@ static PyMethodDef methods[] = { {"temp_test", temp_test, METH_VARARGS}, #include "generated1.i" + +#if PYTHON_USE_NUMPY #include "pyopencv_generated_func_tab.h" +#endif {NULL, NULL}, }; @@ -3918,7 +3923,10 @@ void initcv() MKTYPE(memtrack); #include "generated4.i" + +#if PYTHON_USE_NUMPY #include "pyopencv_generated_type_reg.h" +#endif m = Py_InitModule(MODULESTR"", methods); d = PyModule_GetDict(m); @@ -4015,7 +4023,10 @@ void initcv() PUBLISH(GC_EVAL); #include "generated2.i" + +#if PYTHON_USE_NUMPY #include "pyopencv_generated_const_reg.h" +#endif #if 0 { diff --git a/modules/python/gen2.py b/modules/python/gen2.py index 22e4ade..65fff48 100644 --- a/modules/python/gen2.py +++ b/modules/python/gen2.py @@ -49,7 +49,7 @@ static PyObject* pyopencv_from(const ${cname}& r) static bool pyopencv_to(PyObject* src, ${cname}& dst, const char* name="") { - if( src == NULL or src == Py_None ) + if( src == NULL || src == Py_None ) return true; if(!PyObject_TypeCheck(src, &pyopencv_${name}_Type)) { diff --git a/modules/python/opencv2x.h b/modules/python/opencv2x.h index 9a3825a..d971c2e 100644 --- a/modules/python/opencv2x.h +++ b/modules/python/opencv2x.h @@ -693,4 +693,11 @@ static inline PyObject* pyopencv_from(const Moments& m) "nu30", m.nu30, "nu21", m.nu21, "nu12", m.nu12, "mu03", m.nu03); } +static inline PyObject* pyopencv_from(const CvDTreeNode* node) +{ + double value = node->value; + int ivalue = cvRound(value); + return value == ivalue ? PyInt_FromLong(ivalue) : PyFloat_FromDouble(value); +} + #endif -- 2.7.4