From 0570aa64945e94f31c17dc6928edbd9407c52996 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 10:34:43 +0400 Subject: [PATCH 1/6] Avoid problem of old sphinx reporting an error on lines starting from : See http://sourceforge.net/tracker/?func=detail&aid=3484857&group_id=38414&atid=422030 --- .../android_binary_package/android_dev_intro.rst | 6 +++--- doc/tutorials/introduction/desktop_java/java_dev_intro.rst | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst b/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst index a735bc8a7b..021561e8cb 100644 --- a/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst +++ b/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst @@ -210,9 +210,9 @@ You need the following software to be installed in order to develop for Android .. note:: Before start you can read official Android NDK documentation which is in the Android NDK archive, in the folder :file:`docs/`. The main article about using Android NDK build system is in the :file:`ANDROID-MK.html` file. - Some additional information you can find in the :file:`APPLICATION-MK.html`, - :file:`NDK-BUILD.html` files, and :file:`CPU-ARM-NEON.html`, :file:`CPLUSPLUS-SUPPORT.html`, - :file:`PREBUILTS.html`. + Some additional information you can find in + the :file:`APPLICATION-MK.html`, :file:`NDK-BUILD.html` files, + and :file:`CPU-ARM-NEON.html`, :file:`CPLUSPLUS-SUPPORT.html`, :file:`PREBUILTS.html`. #. **CDT plugin for Eclipse** diff --git a/doc/tutorials/introduction/desktop_java/java_dev_intro.rst b/doc/tutorials/introduction/desktop_java/java_dev_intro.rst index 9e5e9510c3..2bb50f00ed 100644 --- a/doc/tutorials/introduction/desktop_java/java_dev_intro.rst +++ b/doc/tutorials/introduction/desktop_java/java_dev_intro.rst @@ -35,8 +35,8 @@ Starting from version 2.4.4 OpenCV includes desktop Java bindings. The most simple way to get it is downloading the appropriate package of **version 2.4.4 or higher** from the `OpenCV SourceForge repository `_. -.. note:: Windows users can find the prebuilt files needed for Java development in the - :file:`opencv/build/java/` folder inside the package. +.. note:: Windows users can find the prebuilt files needed for Java development in + the :file:`opencv/build/java/` folder inside the package. For other OSes it's required to build OpenCV from sources. Another option to get OpenCV sources is to clone `OpenCV git repository From 535f1fb2e2ed9eeb46a6edd97f57e15531b1a925 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 10:39:31 +0400 Subject: [PATCH 2/6] Hack to stop parsing of problematic CvStatModel::train definition --- doc/ocv.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/ocv.py b/doc/ocv.py index ce750933b8..3e325b7d79 100755 --- a/doc/ocv.py +++ b/doc/ocv.py @@ -992,6 +992,11 @@ class DefinitionParser(object): return rv def _parse_signature(self): + if r'CvStatModel::train' in self.definition: + # hack to skip parsing of problematic definition + self.pos = self.end + return [ArgumentDefExpr("const Mat&", "train_data", None), ArgumentDefExpr(None, self.definition[self.definition.find("["):-1], None)], False, True + self.skip_ws() if not self.skip_string('('): self.fail('expected parentheses for function') From 2bbb777d9535833123d5a9e9a1734d52d46746c1 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 11:49:05 +0400 Subject: [PATCH 3/6] Fix warnings about missing parent for class members --- modules/video/doc/motion_analysis_and_object_tracking.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/video/doc/motion_analysis_and_object_tracking.rst b/modules/video/doc/motion_analysis_and_object_tracking.rst index 2c5dcb1a8e..5653e21bdf 100644 --- a/modules/video/doc/motion_analysis_and_object_tracking.rst +++ b/modules/video/doc/motion_analysis_and_object_tracking.rst @@ -650,9 +650,9 @@ createOptFlow_DualTVL1 .. ocv:function:: Ptr createOptFlow_DualTVL1() -The class implements the "Dual TV L1" optical flow algorithm described in [Zach2007]_ and [Javier2012]_ . + The class implements the "Dual TV L1" optical flow algorithm described in [Zach2007]_ and [Javier2012]_ . -Here are important members of the class that control the algorithm, which you can set after constructing the class instance: + Here are important members of the class that control the algorithm, which you can set after constructing the class instance: .. ocv:member:: double tau From ff7b604a250ae46ec413c86f3ede7b1314894f02 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 12:01:27 +0400 Subject: [PATCH 4/6] Fix several inconsistent declarations identified by check_doc2 script --- modules/core/doc/basic_structures.rst | 17 +++++++++-------- .../utility_and_system_functions_and_macros.rst | 4 ++-- .../common_interfaces_of_feature_detectors.rst | 2 +- modules/gpu/doc/data_structures.rst | 6 +++--- modules/ml/doc/boosting.rst | 8 ++++---- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/modules/core/doc/basic_structures.rst b/modules/core/doc/basic_structures.rst index 2e680229ee..054aa2ad7c 100644 --- a/modules/core/doc/basic_structures.rst +++ b/modules/core/doc/basic_structures.rst @@ -2064,10 +2064,11 @@ SparseMat::SparseMat Various SparseMat constructors. .. ocv:function:: SparseMat::SparseMat() -.. ocv:function:: SparseMat::SparseMat(int dims, const int* _sizes, int _type) -.. ocv:function:: SparseMat::SparseMat(const SparseMat& m) -.. ocv:function:: SparseMat::SparseMat(const Mat& m, bool try1d=false) -.. ocv:function:: SparseMat::SparseMat(const CvSparseMat* m) +.. ocv:function:: SparseMat::SparseMat( int dims, const int* _sizes, int _type ) +.. ocv:function:: SparseMat::SparseMat( const SparseMat& m ) +.. ocv:function:: SparseMat::SparseMat( const Mat& m ) +.. ocv:function:: SparseMat::SparseMat( const CvSparseMat* m ) + :param m: Source matrix for copy constructor. If m is dense matrix (ocv:class:`Mat`) then it will be converted to sparse representation. :param dims: Array dimensionality. @@ -2081,12 +2082,12 @@ SparseMat object destructor. .. ocv:function:: SparseMat::~SparseMat() -SparseMat::operator = ---------------------- +SparseMat::operator= +-------------------- Provides sparse matrix assignment operators. -.. ocv:function:: SparseMat& SparseMat::operator=(const SparseMat& m) -.. ocv:function:: SparseMat& SparseMat::operator=(const Mat& m) +.. ocv:function:: SparseMat& SparseMat::operator = (const SparseMat& m) +.. ocv:function:: SparseMat& SparseMat::operator = (const Mat& m) The last variant is equivalent to the corresponding constructor with try1d=false. diff --git a/modules/core/doc/utility_and_system_functions_and_macros.rst b/modules/core/doc/utility_and_system_functions_and_macros.rst index 9055415f13..54198b058a 100644 --- a/modules/core/doc/utility_and_system_functions_and_macros.rst +++ b/modules/core/doc/utility_and_system_functions_and_macros.rst @@ -444,9 +444,9 @@ If ``threads == 0``, OpenCV will disable threading optimizations and run all it' functions sequentially. Passing ``threads < 0`` will reset threads number to system default. This function must be called outside of parallel region. -.. ocv:function:: void setNumThreads(int threads) +.. ocv:function:: void setNumThreads(int nthreads) - :param threads: Number of threads used by OpenCV. + :param nthreads: Number of threads used by OpenCV. OpenCV will try to run it's functions with specified threads number, but some behaviour differs from framework: diff --git a/modules/features2d/doc/common_interfaces_of_feature_detectors.rst b/modules/features2d/doc/common_interfaces_of_feature_detectors.rst index 8804bdeba7..81c72d3a81 100644 --- a/modules/features2d/doc/common_interfaces_of_feature_detectors.rst +++ b/modules/features2d/doc/common_interfaces_of_feature_detectors.rst @@ -531,7 +531,7 @@ StarAdjuster SurfAdjuster ------------ -.. ocv:class:: SurfAdjuster: public AdjusterAdapter +.. ocv:class:: SurfAdjuster : public AdjusterAdapter :ocv:class:`AdjusterAdapter` for ``SurfFeatureDetector``. :: diff --git a/modules/gpu/doc/data_structures.rst b/modules/gpu/doc/data_structures.rst index 1291cf9bb6..5699723203 100644 --- a/modules/gpu/doc/data_structures.rst +++ b/modules/gpu/doc/data_structures.rst @@ -352,9 +352,9 @@ gpu::Stream::enqueueMemSet -------------------------- Initializes or sets device memory to a value. -.. ocv:function:: void gpu::Stream::enqueueMemSet(const GpuMat& src, Scalar val) +.. ocv:function:: void gpu::Stream::enqueueMemSet( GpuMat& src, Scalar val ) -.. ocv:function:: void gpu::Stream::enqueueMemSet(const GpuMat& src, Scalar val, const GpuMat& mask) +.. ocv:function:: void gpu::Stream::enqueueMemSet( GpuMat& src, Scalar val, const GpuMat& mask ) @@ -362,7 +362,7 @@ gpu::Stream::enqueueConvert --------------------------- Converts matrix type, ex from float to uchar depending on type. -.. ocv:function:: void gpu::Stream::enqueueConvert(const GpuMat& src, GpuMat& dst, int type, double a = 1, double b = 0) +.. ocv:function:: void gpu::Stream::enqueueConvert( const GpuMat& src, GpuMat& dst, int dtype, double a=1, double b=0 ) diff --git a/modules/ml/doc/boosting.rst b/modules/ml/doc/boosting.rst index 6dd40f7350..7c5bc83fce 100644 --- a/modules/ml/doc/boosting.rst +++ b/modules/ml/doc/boosting.rst @@ -169,11 +169,11 @@ CvBoost::predict ---------------- Predicts a response for an input sample. -.. ocv:function:: float CvBoost::predict( const Mat& sample, const Mat& missing=Mat(), const Range& slice=Range::all(), bool raw_mode=false, bool return_sum=false ) const +.. ocv:function:: float CvBoost::predict( const cv::Mat& sample, const cv::Mat& missing=Mat(), const cv::Range& slice=Range::all(), bool rawMode=false, bool returnSum=false ) const .. ocv:function:: float CvBoost::predict( const CvMat* sample, const CvMat* missing=0, CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ, bool raw_mode=false, bool return_sum=false ) const -.. ocv:pyfunction:: cv2.Boost.predict(sample[, missing[, slice[, raw_mode[, return_sum]]]]) -> retval +.. ocv:pyfunction:: cv2.Boost.predict(sample[, missing[, slice[, rawMode[, returnSum]]]]) -> retval :param sample: Input sample. @@ -183,9 +183,9 @@ Predicts a response for an input sample. :param slice: Continuous subset of the sequence of weak classifiers to be used for prediction. By default, all the weak classifiers are used. - :param raw_mode: Normally, it should be set to ``false``. + :param rawMode: Normally, it should be set to ``false``. - :param return_sum: If ``true`` then return sum of votes instead of the class label. + :param returnSum: If ``true`` then return sum of votes instead of the class label. The method runs the sample through the trees in the ensemble and returns the output class label based on the weighted voting. From 2fe7482b73e80c1a5221512305c7da5157e6a2e3 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 14:19:59 +0400 Subject: [PATCH 5/6] Add support for enums into rst ocv domain --- doc/ocv.py | 56 +++++++++++++++-- .../gpu/doc/initalization_and_information.rst | 29 +++++---- modules/gpu/doc/video.rst | 63 +++++++++++-------- modules/stitching/doc/motion_estimation.rst | 14 ++--- 4 files changed, 108 insertions(+), 54 deletions(-) diff --git a/doc/ocv.py b/doc/ocv.py index 3e325b7d79..4ff8a6deb5 100755 --- a/doc/ocv.py +++ b/doc/ocv.py @@ -1080,6 +1080,17 @@ class DefinitionParser(object): value = None return MemberObjDefExpr(name, visibility, static, typename, value) + def parse_enum_member_object(self): + visibility, static = self._parse_visibility_static() + typename = None + name = self._parse_type() + self.skip_ws() + if self.skip_string('='): + value = self.read_rest().strip() + else: + value = None + return MemberObjDefExpr(name, visibility, static, typename, value) + def parse_function(self): visibility, static = self._parse_visibility_static() if self.skip_word('explicit'): @@ -1185,6 +1196,8 @@ class OCVObject(ObjectDescription): def add_target_and_index(self, sigobj, sig, signode): theid = sig#obj.get_id() theid = re.sub(r" +", " ", theid) + if self.objtype == 'emember': + theid = re.sub(r" ?=.*", "", theid) theid = re.sub(r"=[^,()]+\([^)]*?\)[^,)]*(,|\))", "\\1", theid) theid = re.sub(r"=\w*[^,)(]+(,|\))", "\\1", theid) theid = theid.replace("( ", "(").replace(" )", ")") @@ -1298,6 +1311,25 @@ class OCVTypeObject(OCVObject): signode += nodes.Text(' ') self.attach_name(signode, obj.name) +class OCVEnumObject(OCVObject): + + def get_index_text(self, name): + if self.objtype == 'enum': + return _('%s (enum)') % name + return '' + + def parse_definition(self, parser): + return parser.parse_type_object() + + def describe_signature(self, signode, obj): + self.attach_modifiers(signode, obj) + signode += addnodes.desc_annotation('enum ', 'enum ') + if obj.typename is not None: + self.attach_type(signode, obj.typename) + signode += nodes.Text(' ') + self.attach_name(signode, obj.name) + + class OCVMemberObject(OCVObject): ismember = True @@ -1314,12 +1346,20 @@ class OCVMemberObject(OCVObject): def describe_signature(self, signode, obj): self.attach_modifiers(signode, obj) - self.attach_type(signode, obj.typename) - signode += nodes.Text(' ') + if obj.typename: + self.attach_type(signode, obj.typename) + signode += nodes.Text(' ') self.attach_name(signode, obj.name) if obj.value is not None: signode += nodes.Text(u' = ' + obj.value) +class OCVEnumMemberObject(OCVMemberObject): + def parse_definition(self, parser): + # parent_class = self.env.temp_data.get('ocv:parent') + # if parent_class is None: + # parser.fail("missing parent structure/class") + return parser.parse_enum_member_object() + class OCVFunctionObject(OCVObject): def attach_function(self, node, func): @@ -1453,7 +1493,9 @@ class OCVDomain(Domain): 'pyfunction': ObjType(l_('pyfunction'), 'pyfunc'), 'pyoldfunction': ObjType(l_('pyoldfunction'), 'pyoldfunc'), 'member': ObjType(l_('member'), 'member'), - 'type': ObjType(l_('type'), 'type') + 'emember': ObjType(l_('emember'), 'emember'), + 'type': ObjType(l_('type'), 'type'), + 'enum': ObjType(l_('enum'), 'enum') } directives = { @@ -1465,7 +1507,9 @@ class OCVDomain(Domain): 'pyfunction': OCVPyModulelevel, 'pyoldfunction': OCVPyOldModulelevel, 'member': OCVMemberObject, + 'emember': OCVEnumMemberObject, 'type': OCVTypeObject, + 'enum': OCVEnumObject, 'namespace': OCVCurrentNamespace } roles = { @@ -1480,7 +1524,9 @@ class OCVDomain(Domain): 'pyfunc' : OCVPyXRefRole(), 'pyoldfunc' : OCVPyXRefRole(), 'member': OCVXRefRole(), - 'type': OCVXRefRole() + 'emember': OCVXRefRole(), + 'type': OCVXRefRole(), + 'enum': OCVXRefRole() } initial_data = { 'objects': {}, # fullname -> docname, objtype @@ -1568,7 +1614,9 @@ class OCVDomain(Domain): 'pyfunction': _('Python function'), 'pyoldfunction': _('Legacy Python function'), 'member': _('C++ member'), + 'emember': _('enum member'), 'type': _('C/C++ type'), + 'enum': _('C/C++ enum'), 'namespace': _('C++ namespace'), }.get(type.lname, _('%s %s') % (self.label, type.lname)) diff --git a/modules/gpu/doc/initalization_and_information.rst b/modules/gpu/doc/initalization_and_information.rst index ed045a3098..fc7236dcf1 100644 --- a/modules/gpu/doc/initalization_and_information.rst +++ b/modules/gpu/doc/initalization_and_information.rst @@ -47,20 +47,19 @@ Any subsequent API call to this device will reinitialize the device. gpu::FeatureSet --------------- -Enumeration providing GPU computing features. :: +Enumeration providing GPU computing features. - enum FeatureSet - { - FEATURE_SET_COMPUTE_10, - FEATURE_SET_COMPUTE_11, - FEATURE_SET_COMPUTE_12, - FEATURE_SET_COMPUTE_13, - FEATURE_SET_COMPUTE_20, - FEATURE_SET_COMPUTE_21, - GLOBAL_ATOMICS, - SHARED_ATOMICS, - NATIVE_DOUBLE - }; +.. ocv:enum:: gpu::FeatureSet + + .. ocv:emember:: FEATURE_SET_COMPUTE_10 + .. ocv:emember:: FEATURE_SET_COMPUTE_11 + .. ocv:emember:: FEATURE_SET_COMPUTE_12 + .. ocv:emember:: FEATURE_SET_COMPUTE_13 + .. ocv:emember:: FEATURE_SET_COMPUTE_20 + .. ocv:emember:: FEATURE_SET_COMPUTE_21 + .. ocv:emember:: GLOBAL_ATOMICS + .. ocv:emember:: SHARED_ATOMICS + .. ocv:emember:: NATIVE_DOUBLE gpu::TargetArchs @@ -73,7 +72,7 @@ The following method checks whether the module was built with the support of the .. ocv:function:: static bool gpu::TargetArchs::builtWith( FeatureSet feature_set ) - :param feature_set: Features to be checked. See :ocv:class:`gpu::FeatureSet`. + :param feature_set: Features to be checked. See :ocv:enum:`gpu::FeatureSet`. There is a set of methods to check whether the module contains intermediate (PTX) or binary GPU code for the given architecture(s): @@ -197,7 +196,7 @@ Provides information on GPU feature support. .. ocv:function:: bool gpu::DeviceInfo::supports( FeatureSet feature_set ) const - :param feature_set: Features to be checked. See :ocv:class:`gpu::FeatureSet`. + :param feature_set: Features to be checked. See :ocv:enum:`gpu::FeatureSet`. This function returns ``true`` if the device has the specified GPU feature. Otherwise, it returns ``false`` . diff --git a/modules/gpu/doc/video.rst b/modules/gpu/doc/video.rst index 9b17081c24..fc5b1fb6cb 100644 --- a/modules/gpu/doc/video.rst +++ b/modules/gpu/doc/video.rst @@ -985,41 +985,51 @@ Class for reading video from files. gpu::VideoReader_GPU::Codec --------------------------- -Video codecs supported by :ocv:class:`gpu::VideoReader_GPU` . :: +Video codecs supported by :ocv:class:`gpu::VideoReader_GPU` . - enum Codec - { - MPEG1 = 0, - MPEG2, - MPEG4, - VC1, - H264, - JPEG, - H264_SVC, - H264_MVC, - - Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), // Y,U,V (4:2:0) - Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,V,U (4:2:0) - Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,UV (4:2:0) - Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), // YUYV/YUY2 (4:2:2) - Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')), // UYVY (4:2:2) - }; +.. ocv:enum:: gpu::VideoReader_GPU::Codec + + .. ocv:emember:: MPEG1 = 0 + .. ocv:emember:: MPEG2 + .. ocv:emember:: MPEG4 + .. ocv:emember:: VC1 + .. ocv:emember:: H264 + .. ocv:emember:: JPEG + .. ocv:emember:: H264_SVC + .. ocv:emember:: H264_MVC + + .. ocv:emember:: Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')) + + Y,U,V (4:2:0) + + .. ocv:emember:: Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')) + + Y,V,U (4:2:0) + + .. ocv:emember:: Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')) + Y,UV (4:2:0) + + .. ocv:emember:: Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')) + + YUYV/YUY2 (4:2:2) + + .. ocv:emember:: Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) + + UYVY (4:2:2) gpu::VideoReader_GPU::ChromaFormat ---------------------------------- -Chroma formats supported by :ocv:class:`gpu::VideoReader_GPU` . :: +Chroma formats supported by :ocv:class:`gpu::VideoReader_GPU` . - enum ChromaFormat - { - Monochrome=0, - YUV420, - YUV422, - YUV444, - }; +.. ocv:enum:: gpu::VideoReader_GPU::ChromaFormat + .. ocv:emember:: Monochrome = 0 + .. ocv:emember:: YUV420 + .. ocv:emember:: YUV422 + .. ocv:emember:: YUV444 gpu::VideoReader_GPU::FormatInfo @@ -1037,7 +1047,6 @@ Struct providing information about video file format. :: }; - gpu::VideoReader_GPU::VideoReader_GPU ------------------------------------- Constructors. diff --git a/modules/stitching/doc/motion_estimation.rst b/modules/stitching/doc/motion_estimation.rst index a4cc62f001..6cda27522d 100644 --- a/modules/stitching/doc/motion_estimation.rst +++ b/modules/stitching/doc/motion_estimation.rst @@ -221,15 +221,13 @@ Implementation of the camera parameters refinement algorithm which minimizes sum detail::WaveCorrectKind ----------------------- -.. ocv:class:: detail::WaveCorrectKind +Wave correction kind. -Wave correction kind. :: +.. ocv:enum:: detail::WaveCorrectKind + + .. ocv:emember:: WAVE_CORRECT_HORIZ + .. ocv:emember:: WAVE_CORRECT_VERT - enum CV_EXPORTS WaveCorrectKind - { - WAVE_CORRECT_HORIZ, - WAVE_CORRECT_VERT - }; detail::waveCorrect ------------------- @@ -239,4 +237,4 @@ Tries to make panorama more horizontal (or vertical). :param rmats: Camera rotation matrices. - :param kind: Correction kind, see :ocv:class:`detail::WaveCorrectKind`. + :param kind: Correction kind, see :ocv:enum:`detail::WaveCorrectKind`. From 60f7b1d98d1d7c0dbdd01817b0d19b968faf2bb8 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 19 Feb 2013 15:56:34 +0400 Subject: [PATCH 6/6] Whitelist functions/structs in check_docs2 that are impossible to fix in 2.4 --- doc/check_docs2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/check_docs2.py b/doc/check_docs2.py index 0a29b50384..8092c68011 100755 --- a/doc/check_docs2.py +++ b/doc/check_docs2.py @@ -38,7 +38,7 @@ doc_signatures_whitelist = [ "CvArr", "CvFileStorage", # other "InputArray", "OutputArray", -] +] + ["CvSubdiv2D", "CvQuadEdge2D", "CvSubdiv2DPoint", "cvDrawContours"] defines = ["cvGraphEdgeIdx", "cvFree", "CV_Assert", "cvSqrt", "cvGetGraphVtx", "cvGraphVtxIdx", "cvCaptureFromFile", "cvCaptureFromCAM", "cvCalcBackProjectPatch", "cvCalcBackProject",