diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index 0b09c6fb04..69c838ae22 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1311,23 +1311,36 @@ _Tp Size_<_Tp>::area() const return width * height; } +template static inline +Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b) +{ + a.width *= b; + a.height *= b; + return a; +} template static inline Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b) { - return Size_<_Tp>(a.width * b, a.height * b); + Size_<_Tp> tmp(a); + tmp *= b; + return tmp; } template static inline -Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) +Size_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b) { - return Size_<_Tp>(a.width + b.width, a.height + b.height); + a.width /= b; + a.height /= b; + return a; } template static inline -Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) +Size_<_Tp> operator / (const Size_<_Tp>& a, _Tp b) { - return Size_<_Tp>(a.width - b.width, a.height - b.height); + Size_<_Tp> tmp(a); + tmp /= b; + return tmp; } template static inline @@ -1338,6 +1351,14 @@ Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) return a; } +template static inline +Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) +{ + Size_<_Tp> tmp(a); + tmp += b; + return tmp; +} + template static inline Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) { @@ -1346,6 +1367,14 @@ Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) return a; } +template static inline +Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) +{ + Size_<_Tp> tmp(a); + tmp -= b; + return tmp; +} + template static inline bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b) { @@ -1355,7 +1384,7 @@ bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b) template static inline bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b) { - return a.width != b.width || a.height != b.height; + return !(a == b); }