resolved ticket #1104 (processing of transposed numpy arrays)
This commit is contained in:
parent
ef5d7278ea
commit
3a4e06e289
@ -179,6 +179,7 @@ static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>"
|
|||||||
size_t step[CV_MAX_DIM+1], elemsize = CV_ELEM_SIZE1(type);
|
size_t step[CV_MAX_DIM+1], elemsize = CV_ELEM_SIZE1(type);
|
||||||
const npy_intp* _sizes = PyArray_DIMS(o);
|
const npy_intp* _sizes = PyArray_DIMS(o);
|
||||||
const npy_intp* _strides = PyArray_STRIDES(o);
|
const npy_intp* _strides = PyArray_STRIDES(o);
|
||||||
|
bool transposed = false;
|
||||||
|
|
||||||
for(int i = 0; i < ndims; i++)
|
for(int i = 0; i < ndims; i++)
|
||||||
{
|
{
|
||||||
@ -192,6 +193,13 @@ static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>"
|
|||||||
ndims++;
|
ndims++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( ndims >= 2 && step[0] < step[1] )
|
||||||
|
{
|
||||||
|
std::swap(size[0], size[1]);
|
||||||
|
std::swap(step[0], step[1]);
|
||||||
|
transposed = true;
|
||||||
|
}
|
||||||
|
|
||||||
if( ndims == 3 && size[2] <= CV_CN_MAX && step[1] == elemsize*size[2] )
|
if( ndims == 3 && size[2] <= CV_CN_MAX && step[1] == elemsize*size[2] )
|
||||||
{
|
{
|
||||||
ndims--;
|
ndims--;
|
||||||
@ -213,6 +221,14 @@ static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>"
|
|||||||
// (since Mat destructor will decrement the reference counter)
|
// (since Mat destructor will decrement the reference counter)
|
||||||
};
|
};
|
||||||
m.allocator = &g_numpyAllocator;
|
m.allocator = &g_numpyAllocator;
|
||||||
|
|
||||||
|
if( transposed )
|
||||||
|
{
|
||||||
|
Mat tmp;
|
||||||
|
tmp.allocator = &g_numpyAllocator;
|
||||||
|
transpose(m, tmp);
|
||||||
|
m = tmp;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user