From a1c456b7c3bab5b1b6e639e1c28d7099c5fb7543 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Thu, 14 Mar 2013 14:49:15 +0400 Subject: [PATCH 1/2] Extract common base header for C and C++ APIs --- modules/calib3d/include/opencv2/calib3d.hpp | 12 +- modules/core/include/opencv2/core.hpp | 18 +- modules/core/include/opencv2/core/cvdef.h | 424 ++++++++++++++++++ .../core/include/opencv2/core/operations.hpp | 34 -- modules/core/include/opencv2/core/types_c.h | 280 +----------- modules/imgproc/include/opencv2/imgproc.hpp | 2 +- modules/legacy/src/_vm.h | 2 - modules/legacy/src/lcm.cpp | 8 +- modules/python/src2/hdr_parser.py | 2 +- .../softcascade/doc/softcascade_detector.rst | 4 +- .../include/opencv2/softcascade.hpp | 4 +- .../src/integral_channel_builder.cpp | 2 +- .../video/include/opencv2/video/tracking.hpp | 4 +- modules/video/src/bgfg_gaussmix2.cpp | 2 +- samples/ocl/performance.cpp | 2 +- 15 files changed, 460 insertions(+), 340 deletions(-) create mode 100644 modules/core/include/opencv2/core/cvdef.h diff --git a/modules/calib3d/include/opencv2/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d.hpp index 61c2d2a2d..989912cda 100644 --- a/modules/calib3d/include/opencv2/calib3d.hpp +++ b/modules/calib3d/include/opencv2/calib3d.hpp @@ -550,8 +550,8 @@ enum CV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, - CV_OUT InputOutputArray cameraMatrix, - CV_OUT InputOutputArray distCoeffs, + InputOutputArray cameraMatrix, + InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria = TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) ); @@ -571,10 +571,10 @@ CV_EXPORTS_W void calibrationMatrixValues( InputArray cameraMatrix, CV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, - CV_OUT InputOutputArray cameraMatrix1, - CV_OUT InputOutputArray distCoeffs1, - CV_OUT InputOutputArray cameraMatrix2, - CV_OUT InputOutputArray distCoeffs2, + InputOutputArray cameraMatrix1, + InputOutputArray distCoeffs1, + InputOutputArray cameraMatrix2, + InputOutputArray distCoeffs2, Size imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6), diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index 556a3065d..5e204e841 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -46,6 +46,8 @@ #ifndef __OPENCV_CORE_HPP__ #define __OPENCV_CORE_HPP__ +#include "opencv2/core/cvdef.h" + #include "opencv2/core/types_c.h" #include "opencv2/core/version.hpp" @@ -69,11 +71,6 @@ */ namespace cv { -#undef abs -#undef min -#undef max -#undef Complex - template class CV_EXPORTS Size_; template class CV_EXPORTS Point_; template class CV_EXPORTS Rect_; @@ -2426,10 +2423,10 @@ public: Mat mean; //!< mean value subtracted before the projection and added after the back projection }; -CV_EXPORTS_W void PCACompute(InputArray data, CV_OUT InputOutputArray mean, +CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, OutputArray eigenvectors, int maxComponents=0); -CV_EXPORTS_W void PCACompute(InputArray data, CV_OUT InputOutputArray mean, +CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, OutputArray eigenvectors, double retainedVariance); CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean, @@ -2489,12 +2486,11 @@ public: }; //! computes SVD of src -CV_EXPORTS_W void SVDecomp( InputArray src, CV_OUT OutputArray w, - CV_OUT OutputArray u, CV_OUT OutputArray vt, int flags=0 ); +CV_EXPORTS_W void SVDecomp( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 ); //! performs back substitution for the previously computed SVD CV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt, - InputArray rhs, CV_OUT OutputArray dst ); + InputArray rhs, OutputArray dst ); //! computes Mahalanobis distance between two vectors: sqrt((v1-v2)'*icovar*(v1-v2)), where icovar is the inverse covariation matrix CV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar); @@ -2525,7 +2521,7 @@ enum KMEANS_USE_INITIAL_LABELS=1 // Uses the user-provided labels for K-Means initialization }; //! clusters the input data using k-Means algorithm -CV_EXPORTS_W double kmeans( InputArray data, int K, CV_OUT InputOutputArray bestLabels, +CV_EXPORTS_W double kmeans( InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray() ); diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h new file mode 100644 index 000000000..06b2b5f25 --- /dev/null +++ b/modules/core/include/opencv2/core/cvdef.h @@ -0,0 +1,424 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_CORE_CVDEF_H__ +#define __OPENCV_CORE_CVDEF_H__ + +#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300 +# define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio warnings */ +#endif + +// undef problematic defines sometimes defined by system headers (windows.h in particular) +#undef small +#undef min +#undef max +#undef abs +#undef Complex + +#if defined __ICL +# define CV_ICC __ICL +#elif defined __ICC +# define CV_ICC __ICC +#elif defined __ECL +# define CV_ICC __ECL +#elif defined __ECC +# define CV_ICC __ECC +#elif defined __INTEL_COMPILER +# define CV_ICC __INTEL_COMPILER +#endif + +#if defined CV_ICC && !defined CV_ENABLE_UNROLLED +# define CV_ENABLE_UNROLLED 0 +#else +# define CV_ENABLE_UNROLLED 1 +#endif + +#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS +# define CV_EXPORTS __declspec(dllexport) +#else +# define CV_EXPORTS +#endif + +#ifndef CV_INLINE +# if defined __cplusplus +# define CV_INLINE static inline +# elif (defined WIN32 || defined _WIN32 || defined WINCE) && !defined __GNUC__ +# define CV_INLINE __inline +# else +# define CV_INLINE static +# endif +#endif + +#ifndef CV_EXTERN_C +# ifdef __cplusplus +# define CV_EXTERN_C extern "C" +# else +# define CV_EXTERN_C +# endif +#endif + +/* intrinsics support */ +#if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2) +# include "emmintrin.h" +# define CV_SSE 1 +# define CV_SSE2 1 +# if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) +# include "pmmintrin.h" +# define CV_SSE3 1 +# endif +# if defined __SSSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) +# include "tmmintrin.h" +# define CV_SSSE3 1 +# endif +# if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500) +# include +# define CV_SSE4_1 1 +# endif +# if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500) +# include +# define CV_SSE4_2 1 +# endif +# if defined __AVX__ || (defined _MSC_FULL_VER && _MSC_FULL_VER >= 160040219) +// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX +// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32 +# include +# define CV_AVX 1 +# if defined(_XCR_XFEATURE_ENABLED_MASK) +# define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK) +# else +# define __xgetbv() 0 +# endif +# endif +#endif + +#ifdef __ARM_NEON__ +# include +# define CV_NEON 1 +#endif + +#ifndef CV_SSE +# define CV_SSE 0 +#endif +#ifndef CV_SSE2 +# define CV_SSE2 0 +#endif +#ifndef CV_SSE3 +# define CV_SSE3 0 +#endif +#ifndef CV_SSSE3 +# define CV_SSSE3 0 +#endif +#ifndef CV_SSE4_1 +# define CV_SSE4_1 0 +#endif +#ifndef CV_SSE4_2 +# define CV_SSE4_2 0 +#endif +#ifndef CV_AVX +# define CV_AVX 0 +#endif +#ifndef CV_NEON +# define CV_NEON 0 +#endif + +/* primitive types */ +/* + schar - signed 1 byte integer + uchar - unsigned 1 byte integer + short - signed 2 byte integer + ushort - unsigned 2 byte integer + int - signed 4 byte integer + uint - unsigned 4 byte integer + int64 - signed 8 byte integer + uint64 - unsigned 8 byte integer +*/ + +#if !defined _MSC_VER && !defined __BORLANDC__ +# include +#endif + +typedef signed char schar; + +#ifndef __IPL_H__ + typedef unsigned char uchar; + typedef unsigned short ushort; +#endif + +#if defined _MSC_VER || defined __BORLANDC__ + typedef __int64 int64; + typedef unsigned __int64 uint64; +# define CV_BIG_INT(n) n##I64 +# define CV_BIG_UINT(n) n##UI64 +#else + typedef int64_t int64; + typedef uint64_t uint64; +# define CV_BIG_INT(n) n##LL +# define CV_BIG_UINT(n) n##ULL +#endif + +/* special informative macros for wrapper generators */ +#define CV_EXPORTS_W CV_EXPORTS +#define CV_EXPORTS_W_SIMPLE CV_EXPORTS +#define CV_EXPORTS_AS(synonym) CV_EXPORTS +#define CV_EXPORTS_W_MAP CV_EXPORTS +#define CV_IN_OUT +#define CV_OUT +#define CV_PROP +#define CV_PROP_RW +#define CV_WRAP +#define CV_WRAP_AS(synonym) + +/* fundamental constants */ +#define CV_PI 3.1415926535897932384626433832795 +#define CV_LOG2 0.69314718055994530941723212145818 + +/****************************************************************************************\ +* Matrix type (Mat) * +\****************************************************************************************/ + +#define CV_CN_MAX 512 +#define CV_CN_SHIFT 3 +#define CV_DEPTH_MAX (1 << CV_CN_SHIFT) + +#define CV_8U 0 +#define CV_8S 1 +#define CV_16U 2 +#define CV_16S 3 +#define CV_32S 4 +#define CV_32F 5 +#define CV_64F 6 +#define CV_USRTYPE1 7 + +#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1) +#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) + +#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) +#define CV_MAKE_TYPE CV_MAKETYPE + +#define CV_8UC1 CV_MAKETYPE(CV_8U,1) +#define CV_8UC2 CV_MAKETYPE(CV_8U,2) +#define CV_8UC3 CV_MAKETYPE(CV_8U,3) +#define CV_8UC4 CV_MAKETYPE(CV_8U,4) +#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n)) + +#define CV_8SC1 CV_MAKETYPE(CV_8S,1) +#define CV_8SC2 CV_MAKETYPE(CV_8S,2) +#define CV_8SC3 CV_MAKETYPE(CV_8S,3) +#define CV_8SC4 CV_MAKETYPE(CV_8S,4) +#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n)) + +#define CV_16UC1 CV_MAKETYPE(CV_16U,1) +#define CV_16UC2 CV_MAKETYPE(CV_16U,2) +#define CV_16UC3 CV_MAKETYPE(CV_16U,3) +#define CV_16UC4 CV_MAKETYPE(CV_16U,4) +#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n)) + +#define CV_16SC1 CV_MAKETYPE(CV_16S,1) +#define CV_16SC2 CV_MAKETYPE(CV_16S,2) +#define CV_16SC3 CV_MAKETYPE(CV_16S,3) +#define CV_16SC4 CV_MAKETYPE(CV_16S,4) +#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n)) + +#define CV_32SC1 CV_MAKETYPE(CV_32S,1) +#define CV_32SC2 CV_MAKETYPE(CV_32S,2) +#define CV_32SC3 CV_MAKETYPE(CV_32S,3) +#define CV_32SC4 CV_MAKETYPE(CV_32S,4) +#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n)) + +#define CV_32FC1 CV_MAKETYPE(CV_32F,1) +#define CV_32FC2 CV_MAKETYPE(CV_32F,2) +#define CV_32FC3 CV_MAKETYPE(CV_32F,3) +#define CV_32FC4 CV_MAKETYPE(CV_32F,4) +#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) + +#define CV_64FC1 CV_MAKETYPE(CV_64F,1) +#define CV_64FC2 CV_MAKETYPE(CV_64F,2) +#define CV_64FC3 CV_MAKETYPE(CV_64F,3) +#define CV_64FC4 CV_MAKETYPE(CV_64F,4) +#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) + +#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) +#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) +#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1) +#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) +#define CV_MAT_CONT_FLAG_SHIFT 14 +#define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) +#define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) +#define CV_IS_CONT_MAT CV_IS_MAT_CONT +#define CV_SUBMAT_FLAG_SHIFT 15 +#define CV_SUBMAT_FLAG (1 << CV_SUBMAT_FLAG_SHIFT) +#define CV_IS_SUBMAT(flags) ((flags) & CV_MAT_SUBMAT_FLAG) + +/* Size of each channel item, + 0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */ +#define CV_ELEM_SIZE1(type) \ + ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15) + +/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ +#define CV_ELEM_SIZE(type) \ + (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3)) + + +/****************************************************************************************\ +* fast math * +\****************************************************************************************/ + +#if defined __BORLANDC__ +# include +#else +# include +#endif + +#ifdef HAVE_TEGRA_OPTIMIZATION +# include "tegra_round.hpp" +#endif + +CV_INLINE int cvRound( double value ) +{ +#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__) + __m128d t = _mm_set_sd( value ); + return _mm_cvtsd_si32(t); +#elif defined _MSC_VER && defined _M_IX86 + int t; + __asm + { + fld value; + fistp t; + } + return t; +#elif defined HAVE_LRINT || defined CV_ICC || defined __GNUC__ +# ifdef HAVE_TEGRA_OPTIMIZATION + TEGRA_ROUND(value); +# else + return (int)lrint(value); +# endif +#else + // while this is not IEEE754-compliant rounding, it's usually a good enough approximation + return (int)(value + (value >= 0 ? 0.5 : -0.5)); +#endif +} + +CV_INLINE int cvFloor( double value ) +{ +#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__) + __m128d t = _mm_set_sd( value ); + int i = _mm_cvtsd_si32(t); + return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i))); +#elif defined __GNUC__ + int i = (int)value; + return i - (i > value); +#else + int i = cvRound(value); + float diff = (float)(value - i); + return i - (diff < 0); +#endif +} + +CV_INLINE int cvCeil( double value ) +{ +#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__) + __m128d t = _mm_set_sd( value ); + int i = _mm_cvtsd_si32(t); + return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t)); +#elif defined __GNUC__ + int i = (int)value; + return i + (i < value); +#else + int i = cvRound(value); + float diff = (float)(i - value); + return i + (diff < 0); +#endif +} + +CV_INLINE int cvIsNaN( double value ) +{ + union { uint64 u; double f; } ieee754; + ieee754.f = value; + return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) + + ((unsigned)ieee754.u != 0) > 0x7ff00000; +} + +CV_INLINE int cvIsInf( double value ) +{ + union { uint64 u; double f; } ieee754; + ieee754.f = value; + return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 && + (unsigned)ieee754.u == 0; +} + +/****************************************************************************************\ +* exchange-add operation for atomic operations on reference counters * +\****************************************************************************************/ + +#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32) + // atomic increment on the linux version of the Intel(tm) compiler +# define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd(const_cast(reinterpret_cast(addr)), delta) +#elif defined __GNUC__ +# if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ +# ifdef __ATOMIC_ACQ_REL +# define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) +# else +# define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), delta, 4) +# endif +# else +# ifdef __ATOMIC_ACQ_REL + // version for gcc >= 4.7 +# define CV_XADD(addr, delta) __atomic_fetch_add(addr, delta, __ATOMIC_ACQ_REL) +# else +# define CV_XADD(addr, delta) __sync_fetch_and_add(addr, delta) +# endif +# endif +#elif (defined WIN32 || defined _WIN32 || defined WINCE) && (!defined RC_INVOKED) +# if !defined(_M_AMD64) && !defined(_M_IA64) && !defined(_M_ARM) + CV_EXTERN_C __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile *Addend, long Value); +# define CV_XADD(addr, delta) (int)InterlockedExchangeAdd((long volatile*)addr, delta) +# else + CV_EXTERN_C long _InterlockedExchangeAdd (long volatile *Addend, long Value); +# pragma intrinsic(_InterlockedExchangeAdd) +# define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta) +# endif +#else + CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; } +#endif + +#endif // __OPENCV_CORE_CVDEF_H__ \ No newline at end of file diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index 3e248296a..c259b892b 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -51,40 +51,6 @@ #ifdef __cplusplus -/////// exchange-add operation for atomic operations on reference counters /////// -#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32) - // atomic increment on the linux version of the Intel(tm) compiler - #define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd(const_cast(reinterpret_cast(addr)), delta) -#elif defined __GNUC__ - #if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ - #ifdef __ATOMIC_ACQ_REL - #define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) - #else - #define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), delta, 4) - #endif - #else - #ifdef __ATOMIC_ACQ_REL - // version for gcc >= 4.7 - #define CV_XADD(addr, delta) __atomic_fetch_add(addr, delta, __ATOMIC_ACQ_REL) - #else - #define CV_XADD(addr, delta) __sync_fetch_and_add(addr, delta) - #endif - #endif -#elif (defined WIN32 || defined _WIN32 || defined WINCE) && (!defined RC_INVOKED) - #if !defined(_M_AMD64) && !defined(_M_IA64) && !defined(_M_ARM) - extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile *Addend, long Value); - #define CV_XADD(addr, delta) (int)InterlockedExchangeAdd((long volatile*)addr, delta) - #else - extern "C" long _InterlockedExchangeAdd (long volatile *Addend, long Value); - #pragma intrinsic(_InterlockedExchangeAdd) - #define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta) - #endif -#else - static inline CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; } -#endif - - - #include #ifdef _MSC_VER diff --git a/modules/core/include/opencv2/core/types_c.h b/modules/core/include/opencv2/core/types_c.h index 33e7fe993..5838c0415 100644 --- a/modules/core/include/opencv2/core/types_c.h +++ b/modules/core/include/opencv2/core/types_c.h @@ -43,57 +43,6 @@ #ifndef __OPENCV_CORE_TYPES_H__ #define __OPENCV_CORE_TYPES_H__ -#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER -# if _MSC_VER > 1300 -# define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio 2005 warnings */ -# endif -#endif - - -#ifndef SKIP_INCLUDES - -#include -#include -#include -#include - -#if !defined _MSC_VER && !defined __BORLANDC__ -# include -#endif - -#if defined __ICL -# define CV_ICC __ICL -#elif defined __ICC -# define CV_ICC __ICC -#elif defined __ECL -# define CV_ICC __ECL -#elif defined __ECC -# define CV_ICC __ECC -#elif defined __INTEL_COMPILER -# define CV_ICC __INTEL_COMPILER -#endif - -#if defined CV_ICC && !defined CV_ENABLE_UNROLLED -# define CV_ENABLE_UNROLLED 0 -#else -# define CV_ENABLE_UNROLLED 1 -#endif - -#if (defined _M_X64 && defined _MSC_VER && _MSC_VER >= 1400) || (__GNUC__ >= 4 && defined __x86_64__) -# if defined WIN32 -# include -# endif -# if defined __SSE2__ || !defined __GNUC__ -# include -# endif -#endif - -#if defined __BORLANDC__ -# include -#else -# include -#endif - #ifdef HAVE_IPL # ifndef __IPL_H__ # if defined WIN32 || defined _WIN32 @@ -106,6 +55,13 @@ # define HAVE_IPL #endif +#include "opencv2/core/cvdef.h" + +#ifndef SKIP_INCLUDES +#include +#include +#include +#include #endif // SKIP_INCLUDES #if defined WIN32 || defined _WIN32 @@ -116,12 +72,10 @@ # define CV_STDCALL #endif -#ifndef CV_EXTERN_C +#ifndef CV_DEFAULT # ifdef __cplusplus -# define CV_EXTERN_C extern "C" # define CV_DEFAULT(val) = val # else -# define CV_EXTERN_C # define CV_DEFAULT(val) # endif #endif @@ -134,60 +88,10 @@ # endif #endif -#ifndef CV_INLINE -# if defined __cplusplus -# define CV_INLINE inline -# elif (defined WIN32 || defined _WIN32 || defined WINCE) && !defined __GNUC__ -# define CV_INLINE __inline -# else -# define CV_INLINE static -# endif -#endif /* CV_INLINE */ - -#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS -# define CV_EXPORTS __declspec(dllexport) -#else -# define CV_EXPORTS -#endif - #ifndef CVAPI # define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL #endif -#if defined _MSC_VER || defined __BORLANDC__ - typedef __int64 int64; - typedef unsigned __int64 uint64; -# define CV_BIG_INT(n) n##I64 -# define CV_BIG_UINT(n) n##UI64 -#else - typedef int64_t int64; - typedef uint64_t uint64; -# define CV_BIG_INT(n) n##LL -# define CV_BIG_UINT(n) n##ULL -#endif - -#ifndef HAVE_IPL - typedef unsigned char uchar; - typedef unsigned short ushort; -#endif - -typedef signed char schar; - -/* special informative macros for wrapper generators */ -#define CV_CARRAY(counter) -#define CV_CUSTOM_CARRAY(args) -#define CV_EXPORTS_W CV_EXPORTS -#define CV_EXPORTS_W_SIMPLE CV_EXPORTS -#define CV_EXPORTS_AS(synonym) CV_EXPORTS -#define CV_EXPORTS_W_MAP CV_EXPORTS -#define CV_IN_OUT -#define CV_OUT -#define CV_PROP -#define CV_PROP_RW -#define CV_WRAP -#define CV_WRAP_AS(synonym) -#define CV_WRAP_DEFAULT(value) - /* CvArr* is used to pass arbitrary * array-like data structures * into functions where the particular @@ -271,13 +175,6 @@ enum { * Common macros and inline functions * \****************************************************************************************/ -#ifdef HAVE_TEGRA_OPTIMIZATION -# include "tegra_round.hpp" -#endif - -#define CV_PI 3.1415926535897932384626433832795 -#define CV_LOG2 0.69314718055994530941723212145818 - #define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t)) #ifndef MIN @@ -302,88 +199,9 @@ enum { #define CV_CMP(a,b) (((a) > (b)) - ((a) < (b))) #define CV_SIGN(a) CV_CMP((a),0) -CV_INLINE int cvRound( double value ) -{ -#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - return _mm_cvtsd_si32(t); -#elif defined _MSC_VER && defined _M_IX86 - int t; - __asm - { - fld value; - fistp t; - } - return t; -#elif defined HAVE_LRINT || defined CV_ICC || defined __GNUC__ -# ifdef HAVE_TEGRA_OPTIMIZATION - TEGRA_ROUND(value); -# else - return (int)lrint(value); -# endif -#else - // while this is not IEEE754-compliant rounding, it's usually a good enough approximation - return (int)(value + (value >= 0 ? 0.5 : -0.5)); -#endif -} - -#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP) -# include "emmintrin.h" -#endif - -CV_INLINE int cvFloor( double value ) -{ -#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - int i = _mm_cvtsd_si32(t); - return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i))); -#elif defined __GNUC__ - int i = (int)value; - return i - (i > value); -#else - int i = cvRound(value); - float diff = (float)(value - i); - return i - (diff < 0); -#endif -} - - -CV_INLINE int cvCeil( double value ) -{ -#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - int i = _mm_cvtsd_si32(t); - return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t)); -#elif defined __GNUC__ - int i = (int)value; - return i + (i < value); -#else - int i = cvRound(value); - float diff = (float)(i - value); - return i + (diff < 0); -#endif -} - #define cvInvSqrt(value) ((float)(1./sqrt(value))) #define cvSqrt(value) ((float)sqrt(value)) -CV_INLINE int cvIsNaN( double value ) -{ - Cv64suf ieee754; - ieee754.f = value; - return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) + - ((unsigned)ieee754.u != 0) > 0x7ff00000; -} - - -CV_INLINE int cvIsInf( double value ) -{ - Cv64suf ieee754; - ieee754.f = value; - return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 && - (unsigned)ieee754.u == 0; -} - /*************** Random number generation *******************/ @@ -553,82 +371,9 @@ IplConvKernelFP; * Matrix type (CvMat) * \****************************************************************************************/ -#define CV_CN_MAX 512 -#define CV_CN_SHIFT 3 -#define CV_DEPTH_MAX (1 << CV_CN_SHIFT) - -#define CV_8U 0 -#define CV_8S 1 -#define CV_16U 2 -#define CV_16S 3 -#define CV_32S 4 -#define CV_32F 5 -#define CV_64F 6 -#define CV_USRTYPE1 7 - -#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1) -#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) - -#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) -#define CV_MAKE_TYPE CV_MAKETYPE - -#define CV_8UC1 CV_MAKETYPE(CV_8U,1) -#define CV_8UC2 CV_MAKETYPE(CV_8U,2) -#define CV_8UC3 CV_MAKETYPE(CV_8U,3) -#define CV_8UC4 CV_MAKETYPE(CV_8U,4) -#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n)) - -#define CV_8SC1 CV_MAKETYPE(CV_8S,1) -#define CV_8SC2 CV_MAKETYPE(CV_8S,2) -#define CV_8SC3 CV_MAKETYPE(CV_8S,3) -#define CV_8SC4 CV_MAKETYPE(CV_8S,4) -#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n)) - -#define CV_16UC1 CV_MAKETYPE(CV_16U,1) -#define CV_16UC2 CV_MAKETYPE(CV_16U,2) -#define CV_16UC3 CV_MAKETYPE(CV_16U,3) -#define CV_16UC4 CV_MAKETYPE(CV_16U,4) -#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n)) - -#define CV_16SC1 CV_MAKETYPE(CV_16S,1) -#define CV_16SC2 CV_MAKETYPE(CV_16S,2) -#define CV_16SC3 CV_MAKETYPE(CV_16S,3) -#define CV_16SC4 CV_MAKETYPE(CV_16S,4) -#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n)) - -#define CV_32SC1 CV_MAKETYPE(CV_32S,1) -#define CV_32SC2 CV_MAKETYPE(CV_32S,2) -#define CV_32SC3 CV_MAKETYPE(CV_32S,3) -#define CV_32SC4 CV_MAKETYPE(CV_32S,4) -#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n)) - -#define CV_32FC1 CV_MAKETYPE(CV_32F,1) -#define CV_32FC2 CV_MAKETYPE(CV_32F,2) -#define CV_32FC3 CV_MAKETYPE(CV_32F,3) -#define CV_32FC4 CV_MAKETYPE(CV_32F,4) -#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) - -#define CV_64FC1 CV_MAKETYPE(CV_64F,1) -#define CV_64FC2 CV_MAKETYPE(CV_64F,2) -#define CV_64FC3 CV_MAKETYPE(CV_64F,3) -#define CV_64FC4 CV_MAKETYPE(CV_64F,4) -#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) - #define CV_AUTO_STEP 0x7fffffff #define CV_WHOLE_ARR cvSlice( 0, 0x3fffffff ) -#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) -#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) -#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1) -#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) -#define CV_MAT_CONT_FLAG_SHIFT 14 -#define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) -#define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) -#define CV_IS_CONT_MAT CV_IS_MAT_CONT -#define CV_SUBMAT_FLAG_SHIFT 15 -#define CV_SUBMAT_FLAG (1 << CV_SUBMAT_FLAG_SHIFT) -#define CV_IS_SUBMAT(flags) ((flags) & CV_MAT_SUBMAT_FLAG) - #define CV_MAGIC_MASK 0xFFFF0000 #define CV_MAT_MAGIC_VAL 0x42420000 #define CV_TYPE_NAME_MAT "opencv-matrix" @@ -703,15 +448,6 @@ CvMat; #define CV_IS_MAT_CONST(mat) \ (((mat)->rows|(mat)->cols) == 1) -/* Size of each channel item, - 0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */ -#define CV_ELEM_SIZE1(type) \ - ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15) - -/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ -#define CV_ELEM_SIZE(type) \ - (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3)) - #define IPL2CV_DEPTH(depth) \ ((((CV_8U)+(CV_16U<<4)+(CV_32F<<8)+(CV_64F<<16)+(CV_8S<<20)+ \ (CV_16S<<24)+(CV_32S<<28)) >> ((((depth) & 0xF0) >> 2) + \ diff --git a/modules/imgproc/include/opencv2/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc.hpp index 542ab0cdc..df456b5cd 100644 --- a/modules/imgproc/include/opencv2/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc.hpp @@ -1103,7 +1103,7 @@ CV_EXPORTS_W Moments moments( InputArray array, bool binaryImage=false ); //! computes 7 Hu invariants from the moments CV_EXPORTS void HuMoments( const Moments& moments, double hu[7] ); -CV_EXPORTS_W void HuMoments( const Moments& m, CV_OUT OutputArray hu ); +CV_EXPORTS_W void HuMoments( const Moments& m, OutputArray hu ); //! type of the template matching operation enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 }; diff --git a/modules/legacy/src/_vm.h b/modules/legacy/src/_vm.h index 977878899..df247fffb 100644 --- a/modules/legacy/src/_vm.h +++ b/modules/legacy/src/_vm.h @@ -68,8 +68,6 @@ CvStatus icvMakeScanlinesLengths( int* scanlines, /*=============================== PreWarp section ======================================*/ -CV_INLINE int icvGetColor(uchar* valueRGB); - CvStatus icvFindRunsInOneImage( int numLines, /* number of scanlines */ uchar* prewarp, /* prewarp image */ diff --git a/modules/legacy/src/lcm.cpp b/modules/legacy/src/lcm.cpp index eefe70d97..58abcdb7d 100644 --- a/modules/legacy/src/lcm.cpp +++ b/modules/legacy/src/lcm.cpp @@ -199,7 +199,7 @@ int _cvNodeMultyplicity(CvVoronoiSite2D* pSite, // pLCM : in, information about graph // Returns: pointer to graph node //F*/ -CV_IMPL +CV_INLINE CvLCMNode* _cvCreateLCMNode(CvLCM* pLCM); /*F/////////////////////////////////////////////////////////////////////////////////////// @@ -211,7 +211,7 @@ CvLCMNode* _cvCreateLCMNode(CvLCM* pLCM); // pLCM : in, information about graph // Returns: pointer to graph edge //F*/ -CV_IMPL +CV_INLINE CvLCMEdge* _cvCreateLCMEdge(CvLCM* pLCM); /*F/////////////////////////////////////////////////////////////////////////////////////// @@ -228,7 +228,7 @@ CvLCMEdge* _cvCreateLCMEdge(CvLCM* pLCM); // =1, if node is terminal for edge // Returns: //F*/ -CV_IMPL +CV_INLINE void _cvAttachLCMEdgeToLCMNode(CvLCMNode* LCMNode, CvLCMEdge* LCMEdge, CvLCMEdge* &LCMEdge_prev, @@ -263,7 +263,7 @@ void _cvProjectionPointToSegment(CvPoint2D32f* PointO, // pLCMCCNData : out // Returns: //F*/ -CV_IMPL +CV_INLINE void _cvPrepareData(CvLCMComplexNodeData* pLCMCCNData, CvLCMData* pLCMData); diff --git a/modules/python/src2/hdr_parser.py b/modules/python/src2/hdr_parser.py index 77597ab04..536e180c2 100755 --- a/modules/python/src2/hdr_parser.py +++ b/modules/python/src2/hdr_parser.py @@ -400,7 +400,7 @@ class CppHeaderParser(object): # note that we do not strip "static" prefix, which does matter; # it means class methods, not instance methods decl_str = self.batch_replace(decl_str, [("virtual", ""), ("static inline", ""), ("inline", ""),\ - ("CV_EXPORTS_W", ""), ("CV_EXPORTS", ""), ("CV_CDECL", ""), ("CV_WRAP ", " "), ("static CV_INLINE", ""), ("CV_INLINE", "")]).strip() + ("CV_EXPORTS_W", ""), ("CV_EXPORTS", ""), ("CV_CDECL", ""), ("CV_WRAP ", " "), ("CV_INLINE", "")]).strip() static_method = False context = top[0] diff --git a/modules/softcascade/doc/softcascade_detector.rst b/modules/softcascade/doc/softcascade_detector.rst index ce3dfad71..763e862cd 100644 --- a/modules/softcascade/doc/softcascade_detector.rst +++ b/modules/softcascade/doc/softcascade_detector.rst @@ -43,7 +43,7 @@ Implementation of soft (stageless) cascaded detector. :: virtual bool load(const FileNode& fileNode); virtual void read(const FileNode& fileNode); virtual void detect(InputArray image, InputArray rois, std::vector& objects) const; - virtual void detect(InputArray image, InputArray rois, CV_OUT OutputArray rects, CV_OUT OutputArray confs) const; + virtual void detect(InputArray image, InputArray rois, OutputArray rects, OutputArray confs) const; } @@ -119,7 +119,7 @@ Public interface for of soft (stageless) cascaded detector. :: public: virtual ~ChannelFeatureBuilder(); - virtual void operator()(InputArray src, CV_OUT OutputArray channels) const = 0; + virtual void operator()(InputArray src, OutputArray channels) const = 0; static cv::Ptr create(); }; diff --git a/modules/softcascade/include/opencv2/softcascade.hpp b/modules/softcascade/include/opencv2/softcascade.hpp index 396149c84..0e1857deb 100644 --- a/modules/softcascade/include/opencv2/softcascade.hpp +++ b/modules/softcascade/include/opencv2/softcascade.hpp @@ -127,7 +127,7 @@ public: virtual ~ChannelFeatureBuilder(); // apply channels to source frame - CV_WRAP_AS(compute) virtual void operator()(InputArray src, CV_OUT OutputArray channels, cv::Size channelsSize = cv::Size()) const = 0; + CV_WRAP_AS(compute) virtual void operator()(InputArray src, OutputArray channels, cv::Size channelsSize = cv::Size()) const = 0; CV_WRAP virtual int totalChannels() const = 0; virtual cv::AlgorithmInfo* info() const = 0; @@ -170,7 +170,7 @@ public: // Param rects is an output array of bounding rectangles for detected objects. // Param confs is an output array of confidence for detected objects. i-th bounding rectangle corresponds i-th confidence. - CV_WRAP virtual void detect(InputArray image, InputArray rois, CV_OUT OutputArray rects, CV_OUT OutputArray confs) const; + CV_WRAP virtual void detect(InputArray image, InputArray rois, OutputArray rects, OutputArray confs) const; private: void detectNoRoi(const Mat& image, std::vector& objects) const; diff --git a/modules/softcascade/src/integral_channel_builder.cpp b/modules/softcascade/src/integral_channel_builder.cpp index febfe491b..36277a1f8 100644 --- a/modules/softcascade/src/integral_channel_builder.cpp +++ b/modules/softcascade/src/integral_channel_builder.cpp @@ -55,7 +55,7 @@ public: virtual int totalChannels() const {return N_CHANNELS; } - virtual void operator()(cv::InputArray _frame, CV_OUT cv::OutputArray _integrals, cv::Size channelsSize) const + virtual void operator()(cv::InputArray _frame, cv::OutputArray _integrals, cv::Size channelsSize) const { CV_Assert(_frame.type() == CV_8UC3); diff --git a/modules/video/include/opencv2/video/tracking.hpp b/modules/video/include/opencv2/video/tracking.hpp index 509ecda5c..ed322ef77 100644 --- a/modules/video/include/opencv2/video/tracking.hpp +++ b/modules/video/include/opencv2/video/tracking.hpp @@ -325,7 +325,7 @@ CV_EXPORTS_W int buildOpticalFlowPyramid(InputArray img, OutputArrayOfArrays pyr //! computes sparse optical flow using multi-scale Lucas-Kanade algorithm CV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg, - InputArray prevPts, CV_OUT InputOutputArray nextPts, + InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize=Size(21,21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), @@ -333,7 +333,7 @@ CV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg, //! computes dense optical flow using Farneback algorithm CV_EXPORTS_W void calcOpticalFlowFarneback( InputArray prev, InputArray next, - CV_OUT InputOutputArray flow, double pyr_scale, int levels, int winsize, + InputOutputArray flow, double pyr_scale, int levels, int winsize, int iterations, int poly_n, double poly_sigma, int flags ); //! estimates the best-fit Euqcidean, similarity, affine or perspective transformation diff --git a/modules/video/src/bgfg_gaussmix2.cpp b/modules/video/src/bgfg_gaussmix2.cpp index 411cfa320..e764348b4 100644 --- a/modules/video/src/bgfg_gaussmix2.cpp +++ b/modules/video/src/bgfg_gaussmix2.cpp @@ -187,7 +187,7 @@ struct GMM // shadow detection performed per pixel // should work for rgb data, could be usefull for gray scale and depth data as well // See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003. -static CV_INLINE bool +CV_INLINE bool detectShadowGMM(const float* data, int nchannels, int nmodes, const GMM* gmm, const float* mean, float Tb, float TB, float tau) diff --git a/samples/ocl/performance.cpp b/samples/ocl/performance.cpp index c5b9ab652..262e4320b 100644 --- a/samples/ocl/performance.cpp +++ b/samples/ocl/performance.cpp @@ -1031,7 +1031,7 @@ class CascadeClassifier_GPU : public OclCascadeClassifier { public: void detectMultiScale(oclMat &image, - CV_OUT std::vector& faces, + std::vector& faces, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), From e75df5631775dc512fba2d9c41598041c8beedaa Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Fri, 15 Mar 2013 16:55:58 +0400 Subject: [PATCH 2/2] Unified handling of InputOutputArrays in Python wrapper generator This makes arguments of type InputOutputArray required in python unless they have a default value in C++. As result following python functions changes signatures in non-trivial way: * calcOpticalFlowFarneback * calcOpticalFlowPyrLK * calibrateCamera * findContours * findTransformECC * floodFill * kmeans * PCACompute * stereoCalibrate And the following functions become return their modified inputs as a return value: * accumulate * accumulateProduct * accumulateSquare * accumulateWeighted * circle * completeSymm * cornerSubPix * drawChessboardCorners * drawContours * drawDataMatrixCodes * ellipse * fillConvexPoly * fillPoly * filterSpeckles * grabCut * insertChannel * line * patchNaNs * polylines * randn * randShuffle * randu * rectangle * setIdentity * updateMotionHistory * validateDisparity * watershed --- ...mera_calibration_and_3d_reconstruction.rst | 8 +++---- modules/core/doc/clustering.rst | 2 +- modules/core/doc/drawing_functions.rst | 23 ++++++++++--------- modules/core/doc/operations_on_arrays.rst | 14 ++++++----- modules/imgproc/doc/feature_detection.rst | 2 +- .../doc/miscellaneous_transformations.rst | 6 ++--- .../motion_analysis_and_object_tracking.rst | 8 +++---- ...uctural_analysis_and_shape_descriptors.rst | 2 +- modules/python/src2/gen2.py | 3 ++- .../softcascade/doc/softcascade_detector.rst | 2 +- .../motion_analysis_and_object_tracking.rst | 6 ++--- samples/python2/calibrate.py | 6 ++--- samples/python2/contours.py | 2 +- samples/python2/digits_video.py | 6 ++--- samples/python2/floodfill.py | 2 +- samples/python2/kmeans.py | 2 +- samples/python2/opt_flow.py | 2 +- samples/python2/squares.py | 2 +- 18 files changed, 51 insertions(+), 47 deletions(-) diff --git a/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst b/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst index 1759dc584..26c73f1b6 100644 --- a/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst +++ b/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst @@ -117,7 +117,7 @@ Finds the camera intrinsic and extrinsic parameters from several views of a cali .. ocv:function:: double calibrateCamera( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) ) -.. ocv:pyfunction:: cv2.calibrateCamera(objectPoints, imagePoints, imageSize[, cameraMatrix[, distCoeffs[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, cameraMatrix, distCoeffs, rvecs, tvecs +.. ocv:pyfunction:: cv2.calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs[, rvecs[, tvecs[, flags[, criteria]]]]) -> retval, cameraMatrix, distCoeffs, rvecs, tvecs .. ocv:cfunction:: double cvCalibrateCamera2( const CvMat* object_points, const CvMat* image_points, const CvMat* point_counts, CvSize image_size, CvMat* camera_matrix, CvMat* distortion_coeffs, CvMat* rotation_vectors=NULL, CvMat* translation_vectors=NULL, int flags=0, CvTermCriteria term_crit=cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON) ) @@ -433,7 +433,7 @@ Renders the detected chessboard corners. .. ocv:function:: void drawChessboardCorners( InputOutputArray image, Size patternSize, InputArray corners, bool patternWasFound ) -.. ocv:pyfunction:: cv2.drawChessboardCorners(image, patternSize, corners, patternWasFound) -> None +.. ocv:pyfunction:: cv2.drawChessboardCorners(image, patternSize, corners, patternWasFound) -> image .. ocv:cfunction:: void cvDrawChessboardCorners( CvArr* image, CvSize pattern_size, CvPoint2D32f* corners, int count, int pattern_was_found ) .. ocv:pyoldfunction:: cv.DrawChessboardCorners(image, patternSize, corners, patternWasFound)-> None @@ -923,7 +923,7 @@ Filters off small noise blobs (speckles) in the disparity map .. ocv:function:: void filterSpeckles( InputOutputArray img, double newVal, int maxSpeckleSize, double maxDiff, InputOutputArray buf=noArray() ) -.. ocv:pyfunction:: cv2.filterSpeckles(img, newVal, maxSpeckleSize, maxDiff[, buf]) -> None +.. ocv:pyfunction:: cv2.filterSpeckles(img, newVal, maxSpeckleSize, maxDiff[, buf]) -> img, buf :param img: The input 16-bit signed disparity image @@ -1362,7 +1362,7 @@ Calibrates the stereo camera. .. ocv:function:: double stereoCalibrate( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, Size imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6), int flags=CALIB_FIX_INTRINSIC ) -.. ocv:pyfunction:: cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize[, cameraMatrix1[, distCoeffs1[, cameraMatrix2[, distCoeffs2[, R[, T[, E[, F[, criteria[, flags]]]]]]]]]]) -> retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F +.. ocv:pyfunction:: cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize[, R[, T[, E[, F[, criteria[, flags]]]]]]) -> retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F .. ocv:cfunction:: double cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1, const CvMat* image_points2, const CvMat* npoints, CvMat* camera_matrix1, CvMat* dist_coeffs1, CvMat* camera_matrix2, CvMat* dist_coeffs2, CvSize image_size, CvMat* R, CvMat* T, CvMat* E=0, CvMat* F=0, CvTermCriteria term_crit=cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6), int flags=CV_CALIB_FIX_INTRINSIC ) diff --git a/modules/core/doc/clustering.rst b/modules/core/doc/clustering.rst index 5b00d0405..60fb18928 100644 --- a/modules/core/doc/clustering.rst +++ b/modules/core/doc/clustering.rst @@ -9,7 +9,7 @@ Finds centers of clusters and groups input samples around the clusters. .. ocv:function:: double kmeans( InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray() ) -.. ocv:pyfunction:: cv2.kmeans(data, K, criteria, attempts, flags[, bestLabels[, centers]]) -> retval, bestLabels, centers +.. ocv:pyfunction:: cv2.kmeans(data, K, bestLabels, criteria, attempts, flags[, centers]) -> retval, bestLabels, centers .. ocv:cfunction:: int cvKMeans2( const CvArr* samples, int cluster_count, CvArr* labels, CvTermCriteria termcrit, int attempts=1, CvRNG* rng=0, int flags=0, CvArr* _centers=0, double* compactness=0 ) diff --git a/modules/core/doc/drawing_functions.rst b/modules/core/doc/drawing_functions.rst index 8884f1928..6c0ac4b35 100644 --- a/modules/core/doc/drawing_functions.rst +++ b/modules/core/doc/drawing_functions.rst @@ -32,7 +32,7 @@ Draws a circle. .. ocv:function:: void circle(Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, int shift=0) -.. ocv:pyfunction:: cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> None +.. ocv:pyfunction:: cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> img .. ocv:cfunction:: void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 ) @@ -83,12 +83,13 @@ ellipse ----------- Draws a simple or thick elliptic arc or fills an ellipse sector. -.. ocv:function:: void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness=1, int lineType=8, int shift=0) +.. ocv:function:: void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness=1, int lineType=8, int shift=0) -.. ocv:function:: void ellipse(Mat& img, const RotatedRect& box, const Scalar& color, int thickness=1, int lineType=8) +.. ocv:function:: void ellipse(Mat& img, const RotatedRect& box, const Scalar& color, int thickness=1, int lineType=8) -.. ocv:pyfunction:: cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) -> None -.. ocv:pyfunction:: cv2.ellipse(img, box, color[, thickness[, lineType]]) -> None +.. ocv:pyfunction:: cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) -> img + +.. ocv:pyfunction:: cv2.ellipse(img, box, color[, thickness[, lineType]]) -> img .. ocv:cfunction:: void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle, double start_angle, double end_angle, CvScalar color, int thickness=1, int line_type=8, int shift=0 ) @@ -163,7 +164,7 @@ Fills a convex polygon. .. ocv:function:: void fillConvexPoly(Mat& img, const Point* pts, int npts, const Scalar& color, int lineType=8, int shift=0) -.. ocv:pyfunction:: cv2.fillConvexPoly(img, points, color[, lineType[, shift]]) -> None +.. ocv:pyfunction:: cv2.fillConvexPoly(img, points, color[, lineType[, shift]]) -> img .. ocv:cfunction:: void cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color, int line_type=8, int shift=0 ) @@ -193,7 +194,7 @@ Fills the area bounded by one or more polygons. .. ocv:function:: void fillPoly(Mat& img, const Point** pts, const int* npts, int ncontours, const Scalar& color, int lineType=8, int shift=0, Point offset=Point() ) -.. ocv:pyfunction:: cv2.fillPoly(img, pts, color[, lineType[, shift[, offset]]]) -> None +.. ocv:pyfunction:: cv2.fillPoly(img, pts, color[, lineType[, shift[, offset]]]) -> img .. ocv:cfunction:: void cvFillPoly( CvArr* img, CvPoint** pts, const int* npts, int contours, CvScalar color, int line_type=8, int shift=0 ) @@ -331,7 +332,7 @@ Draws a line segment connecting two points. .. ocv:function:: void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) -.. ocv:pyfunction:: cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> None +.. ocv:pyfunction:: cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img .. ocv:cfunction:: void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, int shift=0 ) @@ -421,7 +422,7 @@ Draws a simple, thick, or filled up-right rectangle. .. ocv:function:: void rectangle( Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 ) -.. ocv:pyfunction:: cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> None +.. ocv:pyfunction:: cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img .. ocv:cfunction:: void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, int shift=0 ) @@ -455,7 +456,7 @@ Draws several polygonal curves. .. ocv:function:: void polylines( InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar& color, int thickness=1, int lineType=8, int shift=0 ) -.. ocv:pyfunction:: cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> None +.. ocv:pyfunction:: cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img .. ocv:cfunction:: void cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours, int is_closed, CvScalar color, int thickness=1, int line_type=8, int shift=0 ) @@ -488,7 +489,7 @@ Draws contours outlines or filled contours. .. ocv:function:: void drawContours( InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point() ) -.. ocv:pyfunction:: cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> None +.. ocv:pyfunction:: cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image .. ocv:cfunction:: void cvDrawContours( CvArr * img, CvSeq* contour, CvScalar external_color, CvScalar hole_color, int max_level, int thickness=1, int line_type=8, CvPoint offset=cvPoint(0,0) ) diff --git a/modules/core/doc/operations_on_arrays.rst b/modules/core/doc/operations_on_arrays.rst index 59b319d3e..64ca68618 100644 --- a/modules/core/doc/operations_on_arrays.rst +++ b/modules/core/doc/operations_on_arrays.rst @@ -592,7 +592,7 @@ Copies the lower or the upper half of a square matrix to another half. .. ocv:function:: void completeSymm(InputOutputArray mtx, bool lowerToUpper=false) -.. ocv:pyfunction:: cv2.completeSymm(mtx[, lowerToUpper]) -> None +.. ocv:pyfunction:: cv2.completeSymm(mtx[, lowerToUpper]) -> mtx :param mtx: input-output floating-point square matrix. @@ -2299,7 +2299,9 @@ Performs Principal Component Analysis of the supplied dataset. .. ocv:function:: PCA& PCA::operator()(InputArray data, InputArray mean, int flags, double retainedVariance) -.. ocv:pyfunction:: cv2.PCACompute(data[, mean[, eigenvectors[, maxComponents]]]) -> mean, eigenvectors +.. ocv:pyfunction:: cv2.PCACompute(data, mean[, eigenvectors[, maxComponents]]) -> mean, eigenvectors + +.. ocv:pyfunction:: cv2.PCACompute(data, mean, retainedVariance[, eigenvectors]) -> mean, eigenvectors :param data: input samples stored as the matrix rows or as the matrix columns. @@ -2670,7 +2672,7 @@ Generates a single uniformly-distributed random number or an array of random num .. ocv:function:: void randu( InputOutputArray dst, InputArray low, InputArray high ) -.. ocv:pyfunction:: cv2.randu(dst, low, high) -> None +.. ocv:pyfunction:: cv2.randu(dst, low, high) -> dst :param dst: output array of random numbers; the array must be pre-allocated. @@ -2701,7 +2703,7 @@ Fills the array with normally distributed random numbers. .. ocv:function:: void randn( InputOutputArray dst, InputArray mean, InputArray stddev ) -.. ocv:pyfunction:: cv2.randn(dst, mean, stddev) -> None +.. ocv:pyfunction:: cv2.randn(dst, mean, stddev) -> dst :param dst: output array of random numbers; the array must be pre-allocated and have 1 to 4 channels. @@ -2724,7 +2726,7 @@ Shuffles the array elements randomly. .. ocv:function:: void randShuffle( InputOutputArray dst, double iterFactor=1., RNG* rng=0 ) -.. ocv:pyfunction:: cv2.randShuffle(dst[, iterFactor]) -> None +.. ocv:pyfunction:: cv2.randShuffle(dst[, iterFactor]) -> dst :param dst: input/output numerical 1D array. @@ -2864,7 +2866,7 @@ Initializes a scaled identity matrix. .. ocv:function:: void setIdentity( InputOutputArray mtx, const Scalar& s=Scalar(1) ) -.. ocv:pyfunction:: cv2.setIdentity(mtx[, s]) -> None +.. ocv:pyfunction:: cv2.setIdentity(mtx[, s]) -> mtx .. ocv:cfunction:: void cvSetIdentity(CvArr* mat, CvScalar value=cvRealScalar(1)) diff --git a/modules/imgproc/doc/feature_detection.rst b/modules/imgproc/doc/feature_detection.rst index c705842f2..5098ba135 100644 --- a/modules/imgproc/doc/feature_detection.rst +++ b/modules/imgproc/doc/feature_detection.rst @@ -162,7 +162,7 @@ Refines the corner locations. .. ocv:function:: void cornerSubPix( InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria ) -.. ocv:pyfunction:: cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria) -> None +.. ocv:pyfunction:: cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria) -> corners .. ocv:cfunction:: void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone, CvTermCriteria criteria ) diff --git a/modules/imgproc/doc/miscellaneous_transformations.rst b/modules/imgproc/doc/miscellaneous_transformations.rst index 4ebf6d5ee..a82923fab 100644 --- a/modules/imgproc/doc/miscellaneous_transformations.rst +++ b/modules/imgproc/doc/miscellaneous_transformations.rst @@ -488,7 +488,7 @@ Fills a connected component with the given color. .. ocv:function:: int floodFill( InputOutputArray image, InputOutputArray mask, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 ) -.. ocv:pyfunction:: cv2.floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, rect +.. ocv:pyfunction:: cv2.floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, image, mask, rect .. ocv:cfunction:: void cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff=cvScalarAll(0), CvScalar up_diff=cvScalarAll(0), CvConnectedComp* comp=NULL, int flags=4, CvArr* mask=NULL ) .. ocv:pyoldfunction:: cv.FloodFill(image, seed_point, new_val, lo_diff=(0, 0, 0, 0), up_diff=(0, 0, 0, 0), flags=4, mask=None)-> comp @@ -731,7 +731,7 @@ Performs a marker-based image segmentation using the watershed algorithm. .. ocv:cfunction:: void cvWatershed( const CvArr* image, CvArr* markers ) -.. ocv:pyfunction:: cv2.watershed(image, markers) -> None +.. ocv:pyfunction:: cv2.watershed(image, markers) -> markers :param image: Input 8-bit 3-channel image. @@ -753,7 +753,7 @@ Runs the GrabCut algorithm. .. ocv:function:: void grabCut( InputArray img, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, int iterCount, int mode=GC_EVAL ) -.. ocv:pyfunction:: cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount[, mode]) -> None +.. ocv:pyfunction:: cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount[, mode]) -> mask, bgdModel, fgdModel :param img: Input 8-bit 3-channel image. diff --git a/modules/imgproc/doc/motion_analysis_and_object_tracking.rst b/modules/imgproc/doc/motion_analysis_and_object_tracking.rst index 80834819b..bcc372a6a 100644 --- a/modules/imgproc/doc/motion_analysis_and_object_tracking.rst +++ b/modules/imgproc/doc/motion_analysis_and_object_tracking.rst @@ -9,7 +9,7 @@ Adds an image to the accumulator. .. ocv:function:: void accumulate( InputArray src, InputOutputArray dst, InputArray mask=noArray() ) -.. ocv:pyfunction:: cv2.accumulate(src, dst[, mask]) -> None +.. ocv:pyfunction:: cv2.accumulate(src, dst[, mask]) -> dst .. ocv:cfunction:: void cvAcc( const CvArr* image, CvArr* sum, const CvArr* mask=NULL ) @@ -45,7 +45,7 @@ Adds the square of a source image to the accumulator. .. ocv:function:: void accumulateSquare( InputArray src, InputOutputArray dst, InputArray mask=noArray() ) -.. ocv:pyfunction:: cv2.accumulateSquare(src, dst[, mask]) -> None +.. ocv:pyfunction:: cv2.accumulateSquare(src, dst[, mask]) -> dst .. ocv:cfunction:: void cvSquareAcc( const CvArr* image, CvArr* sqsum, const CvArr* mask=NULL ) @@ -79,7 +79,7 @@ Adds the per-element product of two input images to the accumulator. .. ocv:function:: void accumulateProduct( InputArray src1, InputArray src2, InputOutputArray dst, InputArray mask=noArray() ) -.. ocv:pyfunction:: cv2.accumulateProduct(src1, src2, dst[, mask]) -> None +.. ocv:pyfunction:: cv2.accumulateProduct(src1, src2, dst[, mask]) -> dst .. ocv:cfunction:: void cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc, const CvArr* mask=NULL ) @@ -115,7 +115,7 @@ Updates a running average. .. ocv:function:: void accumulateWeighted( InputArray src, InputOutputArray dst, double alpha, InputArray mask=noArray() ) -.. ocv:pyfunction:: cv2.accumulateWeighted(src, dst, alpha[, mask]) -> None +.. ocv:pyfunction:: cv2.accumulateWeighted(src, dst, alpha[, mask]) -> dst .. ocv:cfunction:: void cvRunningAvg( const CvArr* image, CvArr* acc, double alpha, const CvArr* mask=NULL ) .. ocv:pyoldfunction:: cv.RunningAvg(image, acc, alpha, mask=None)-> None diff --git a/modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst b/modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst index 9647a7626..4c1911a77 100644 --- a/modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst +++ b/modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst @@ -159,7 +159,7 @@ Finds contours in a binary image. .. ocv:function:: void findContours( InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point()) -.. ocv:pyfunction:: cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy +.. ocv:pyfunction:: cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy .. ocv:cfunction:: int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ) diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index 93ab5ece6..c7aa72544 100755 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -354,6 +354,7 @@ class ArgInfo(object): elif m == "/IO": self.inputarg = True self.outputarg = True + self.returnarg = True elif m.startswith("/A"): self.isarray = True self.arraylen = m[2:].strip() @@ -427,7 +428,7 @@ class FuncVariant(object): continue if a.returnarg: outlist.append((a.name, argno)) - if (not a.inputarg or a.returnarg) and a.isbig(): + if (not a.inputarg) and a.isbig(): outarr_list.append((a.name, argno)) continue if not a.inputarg: diff --git a/modules/softcascade/doc/softcascade_detector.rst b/modules/softcascade/doc/softcascade_detector.rst index 763e862cd..49d1ab0a3 100644 --- a/modules/softcascade/doc/softcascade_detector.rst +++ b/modules/softcascade/doc/softcascade_detector.rst @@ -131,7 +131,7 @@ Destructor for ChannelFeatureBuilder. .. ocv:function:: softcascade::ChannelFeatureBuilder::~ChannelFeatureBuilder() -.. ocv:pyfunction:: cv2.softcascade_ChannelFeatureBuilder_create() -> retval +.. ocv:pyfunction:: cv2.softcascade_ChannelFeatureBuilder_create(featureType) -> retval softcascade::ChannelFeatureBuilder::operator() diff --git a/modules/video/doc/motion_analysis_and_object_tracking.rst b/modules/video/doc/motion_analysis_and_object_tracking.rst index 53922a56c..a193c23a1 100644 --- a/modules/video/doc/motion_analysis_and_object_tracking.rst +++ b/modules/video/doc/motion_analysis_and_object_tracking.rst @@ -10,7 +10,7 @@ Calculates an optical flow for a sparse feature set using the iterative Lucas-Ka .. ocv:function:: void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize=Size(21,21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4 ) -.. ocv:pyfunction:: cv2.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts[, nextPts[, status[, err[, winSize[, maxLevel[, criteria[, flags[, minEigThreshold]]]]]]]]) -> nextPts, status, err +.. ocv:pyfunction:: cv2.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts[, status[, err[, winSize[, maxLevel[, criteria[, flags[, minEigThreshold]]]]]]]) -> nextPts, status, err .. ocv:cfunction:: void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr, CvArr* prev_pyr, CvArr* curr_pyr, const CvPoint2D32f* prev_features, CvPoint2D32f* curr_features, int count, CvSize win_size, int level, char* status, float* track_error, CvTermCriteria criteria, int flags ) .. ocv:pyoldfunction:: cv.CalcOpticalFlowPyrLK(prev, curr, prevPyr, currPyr, prevFeatures, winSize, level, criteria, flags, guesses=None) -> (currFeatures, status, track_error) @@ -77,7 +77,7 @@ Computes a dense optical flow using the Gunnar Farneback's algorithm. .. ocv:cfunction:: void cvCalcOpticalFlowFarneback( const CvArr* prev, const CvArr* next, CvArr* flow, double pyr_scale, int levels, int winsize, int iterations, int poly_n, double poly_sigma, int flags ) -.. ocv:pyfunction:: cv2.calcOpticalFlowFarneback(prev, next, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags[, flow]) -> flow +.. ocv:pyfunction:: cv2.calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags) -> flow :param prev: first 8-bit single-channel input image. @@ -204,7 +204,7 @@ Updates the motion history image by a moving silhouette. .. ocv:function:: void updateMotionHistory( InputArray silhouette, InputOutputArray mhi, double timestamp, double duration ) -.. ocv:pyfunction:: cv2.updateMotionHistory(silhouette, mhi, timestamp, duration) -> None +.. ocv:pyfunction:: cv2.updateMotionHistory(silhouette, mhi, timestamp, duration) -> mhi .. ocv:cfunction:: void cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi, double timestamp, double duration ) .. ocv:pyoldfunction:: cv.UpdateMotionHistory(silhouette, mhi, timestamp, duration)-> None diff --git a/samples/python2/calibrate.py b/samples/python2/calibrate.py index 37d3de245..e23cc323c 100755 --- a/samples/python2/calibrate.py +++ b/samples/python2/calibrate.py @@ -27,7 +27,7 @@ if __name__ == '__main__': img_mask = img_mask[0] except: img_mask = '../cpp/left*.jpg' - + img_names = glob(img_mask) debug_dir = args.get('--debug') square_size = float(args.get('--square_size', 1.0)) @@ -46,7 +46,7 @@ if __name__ == '__main__': if img is None: print "Failed to load", fn continue - + h, w = img.shape[:2] found, corners = cv2.findChessboardCorners(img, pattern_size) if found: @@ -65,7 +65,7 @@ if __name__ == '__main__': print 'ok' - rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h)) + rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h), None, None) print "RMS:", rms print "camera matrix:\n", camera_matrix print "distortion coefficients: ", dist_coefs.ravel() diff --git a/samples/python2/contours.py b/samples/python2/contours.py index f8cc12c0c..f81f21231 100755 --- a/samples/python2/contours.py +++ b/samples/python2/contours.py @@ -46,7 +46,7 @@ if __name__ == '__main__': img = make_image() h, w = img.shape[:2] - contours0, hierarchy = cv2.findContours( img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + _, contours0, hierarchy = cv2.findContours( img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contours = [cv2.approxPolyDP(cnt, 3, True) for cnt in contours0] def update(levels): diff --git a/samples/python2/digits_video.py b/samples/python2/digits_video.py index 2aa9c1676..ca72a9350 100755 --- a/samples/python2/digits_video.py +++ b/samples/python2/digits_video.py @@ -14,9 +14,9 @@ from common import mosaic from digits import * def main(): - try: + try: src = sys.argv[1] - except: + except: src = 0 cap = video.create_capture(src) @@ -35,7 +35,7 @@ def main(): bin = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 31, 10) bin = cv2.medianBlur(bin, 3) - contours, heirs = cv2.findContours( bin.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) + _, contours, heirs = cv2.findContours( bin.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) try: heirs = heirs[0] except: diff --git a/samples/python2/floodfill.py b/samples/python2/floodfill.py index 16c6470c8..ef19141f8 100755 --- a/samples/python2/floodfill.py +++ b/samples/python2/floodfill.py @@ -29,7 +29,7 @@ if __name__ == '__main__': if img is None: print 'Failed to load image file:', fn sys.exit(1) - + h, w = img.shape[:2] mask = np.zeros((h+2, w+2), np.uint8) seed_pt = None diff --git a/samples/python2/kmeans.py b/samples/python2/kmeans.py index 0656fa7ad..ecf8c6f37 100755 --- a/samples/python2/kmeans.py +++ b/samples/python2/kmeans.py @@ -32,7 +32,7 @@ if __name__ == '__main__': points, _ = make_gaussians(cluster_n, img_size) term_crit = (cv2.TERM_CRITERIA_EPS, 30, 0.1) - ret, labels, centers = cv2.kmeans(points, cluster_n, term_crit, 10, 0) + ret, labels, centers = cv2.kmeans(points, cluster_n, None, term_crit, 10, 0) img = np.zeros((img_size, img_size, 3), np.uint8) for (x, y), label in zip(np.int32(points), labels.ravel()): diff --git a/samples/python2/opt_flow.py b/samples/python2/opt_flow.py index 0dba85f63..14efbfa8f 100755 --- a/samples/python2/opt_flow.py +++ b/samples/python2/opt_flow.py @@ -63,7 +63,7 @@ if __name__ == '__main__': while True: ret, img = cam.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) - flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0) + flow = cv2.calcOpticalFlowFarneback(prevgray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) prevgray = gray cv2.imshow('flow', draw_flow(gray, flow)) diff --git a/samples/python2/squares.py b/samples/python2/squares.py index 36676b454..c12b88401 100755 --- a/samples/python2/squares.py +++ b/samples/python2/squares.py @@ -24,7 +24,7 @@ def find_squares(img): bin = cv2.dilate(bin, None) else: retval, bin = cv2.threshold(gray, thrs, 255, cv2.THRESH_BINARY) - contours, hierarchy = cv2.findContours(bin, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + bin, contours, hierarchy = cv2.findContours(bin, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: cnt_len = cv2.arcLength(cnt, True) cnt = cv2.approxPolyDP(cnt, 0.02*cnt_len, True)