From 1df10553bb6221be627233f43fb10f5415da9954 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 25 Jan 2013 23:45:41 +0400 Subject: [PATCH] fixed bugs #1373, #2629, #2719 --- .../core/include/opencv2/core/operations.hpp | 2 +- modules/core/include/opencv2/core/types_c.h | 22 ++++--------------- modules/core/src/matrix.cpp | 3 ++- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index fc40f5724..63fc23c3b 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -716,7 +716,7 @@ template struct CV_EXPORTS Matx_DetOp double operator ()(const Matx<_Tp, m, m>& a) const { Matx<_Tp, m, m> temp = a; - double p = LU(temp.val, m, m, 0, 0, 0); + double p = LU(temp.val, m*sizeof(_Tp), m, 0, 0, 0); if( p == 0 ) return p; for( int i = 0; i < m; i++ ) diff --git a/modules/core/include/opencv2/core/types_c.h b/modules/core/include/opencv2/core/types_c.h index cbc7872e6..33e7fe993 100644 --- a/modules/core/include/opencv2/core/types_c.h +++ b/modules/core/include/opencv2/core/types_c.h @@ -342,9 +342,8 @@ CV_INLINE int cvFloor( double value ) return i - (i > value); #else int i = cvRound(value); - Cv32suf diff; - diff.f = (float)(value - i); - return i - (diff.i < 0); + float diff = (float)(value - i); + return i - (diff < 0); #endif } @@ -360,9 +359,8 @@ CV_INLINE int cvCeil( double value ) return i + (i < value); #else int i = cvRound(value); - Cv32suf diff; - diff.f = (float)(i - value); - return i + (diff.i < 0); + float diff = (float)(i - value); + return i + (diff < 0); #endif } @@ -371,31 +369,19 @@ CV_INLINE int cvCeil( double value ) CV_INLINE int cvIsNaN( double value ) { -#if 1/*defined _MSC_VER || defined __BORLANDC__ - return _isnan(value); -#elif defined __GNUC__ - return isnan(value); -#else*/ Cv64suf ieee754; ieee754.f = value; return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) + ((unsigned)ieee754.u != 0) > 0x7ff00000; -#endif } CV_INLINE int cvIsInf( double value ) { -#if 1/*defined _MSC_VER || defined __BORLANDC__ - return !_finite(value); -#elif defined __GNUC__ - return isinf(value); -#else*/ Cv64suf ieee754; ieee754.f = value; return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 && (unsigned)ieee754.u == 0; -#endif } diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 7b58debfc..21dfd6141 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -830,7 +830,8 @@ int Mat::checkVector(int _elemChannels, int _depth, bool _requireContinuous) con { return (depth() == _depth || _depth <= 0) && (isContinuous() || !_requireContinuous) && - ((dims == 2 && (((rows == 1 || cols == 1) && channels() == _elemChannels) || (cols == _elemChannels))) || + ((dims == 2 && (((rows == 1 || cols == 1) && channels() == _elemChannels) || + (cols == _elemChannels && channels() == 1))) || (dims == 3 && channels() == 1 && size.p[2] == _elemChannels && (size.p[0] == 1 || size.p[1] == 1) && (isContinuous() || step.p[1] == step.p[2]*size.p[2]))) ? (int)(total()*channels()/_elemChannels) : -1;