|
|
|
@ -279,21 +279,31 @@ Mat::Mat(const Mat& m, const Range& _rowRange, const Range& _colRange) : size(&r |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
*this = m; |
|
|
|
|
if( _rowRange != Range::all() && _rowRange != Range(0,rows) ) |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
CV_Assert( 0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows ); |
|
|
|
|
rows = _rowRange.size(); |
|
|
|
|
data += step*_rowRange.start; |
|
|
|
|
flags |= SUBMATRIX_FLAG; |
|
|
|
|
} |
|
|
|
|
if( _rowRange != Range::all() && _rowRange != Range(0,rows) ) |
|
|
|
|
{ |
|
|
|
|
CV_Assert( 0 <= _rowRange.start && _rowRange.start <= _rowRange.end |
|
|
|
|
&& _rowRange.end <= m.rows ); |
|
|
|
|
rows = _rowRange.size(); |
|
|
|
|
data += step*_rowRange.start; |
|
|
|
|
flags |= SUBMATRIX_FLAG; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( _colRange != Range::all() && _colRange != Range(0,cols) ) |
|
|
|
|
if( _colRange != Range::all() && _colRange != Range(0,cols) ) |
|
|
|
|
{ |
|
|
|
|
CV_Assert( 0 <= _colRange.start && _colRange.start <= _colRange.end |
|
|
|
|
&& _colRange.end <= m.cols ); |
|
|
|
|
cols = _colRange.size(); |
|
|
|
|
data += _colRange.start*elemSize(); |
|
|
|
|
flags &= cols < m.cols ? ~CONTINUOUS_FLAG : -1; |
|
|
|
|
flags |= SUBMATRIX_FLAG; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
catch(...) |
|
|
|
|
{ |
|
|
|
|
CV_Assert( 0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols ); |
|
|
|
|
cols = _colRange.size(); |
|
|
|
|
data += _colRange.start*elemSize(); |
|
|
|
|
flags &= cols < m.cols ? ~CONTINUOUS_FLAG : -1; |
|
|
|
|
flags |= SUBMATRIX_FLAG; |
|
|
|
|
release(); |
|
|
|
|
throw; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( rows == 1 ) |
|
|
|
|