Commit e379ea6e authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

Merge pull request #4117 from jaimefrio:relaxed_strides

parents 80eec9d5 c613ee2d
...@@ -319,8 +319,9 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo info) ...@@ -319,8 +319,9 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo info)
// a) multi-dimensional (ndims > 2) arrays, as well as simpler 1- and 2-dimensional cases // a) multi-dimensional (ndims > 2) arrays, as well as simpler 1- and 2-dimensional cases
// b) transposed arrays, where _strides[] elements go in non-descending order // b) transposed arrays, where _strides[] elements go in non-descending order
// c) flipped arrays, where some of _strides[] elements are negative // c) flipped arrays, where some of _strides[] elements are negative
if( (i == ndims-1 && (size_t)_strides[i] != elemsize) || // the _sizes[i] > 1 is needed to avoid spurious copies when NPY_RELAXED_STRIDES is set
(i < ndims-1 && _strides[i] < _strides[i+1]) ) if( (i == ndims-1 && _sizes[i] > 1 && (size_t)_strides[i] != elemsize) ||
(i < ndims-1 && _sizes[i] > 1 && _strides[i] < _strides[i+1]) )
needcopy = true; needcopy = true;
} }
...@@ -347,10 +348,21 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo info) ...@@ -347,10 +348,21 @@ static bool pyopencv_to(PyObject* o, Mat& m, const ArgInfo info)
_strides = PyArray_STRIDES(oarr); _strides = PyArray_STRIDES(oarr);
} }
for(int i = 0; i < ndims; i++) // Normalize strides in case NPY_RELAXED_STRIDES is set
size_t default_step = elemsize;
for ( int i = ndims - 1; i >= 0; --i )
{ {
size[i] = (int)_sizes[i]; size[i] = (int)_sizes[i];
step[i] = (size_t)_strides[i]; if ( size[i] > 1 )
{
step[i] = (size_t)_strides[i];
default_step = step[i] * size[i];
}
else
{
step[i] = default_step;
default_step *= size[i];
}
} }
// handle degenerate case // handle degenerate case
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment