diff --git a/modules/dnn/include/opencv2/dnn/shape_utils.hpp b/modules/dnn/include/opencv2/dnn/shape_utils.hpp index fa4b497a80..c8da7f8057 100644 --- a/modules/dnn/include/opencv2/dnn/shape_utils.hpp +++ b/modules/dnn/include/opencv2/dnn/shape_utils.hpp @@ -120,7 +120,7 @@ static inline Mat getPlane(const Mat &m, int n, int cn) return Mat(m.dims - 2, sz, m.type(), (void*)m.ptr(n, cn)); } -static inline MatShape shape(const int* dims, const int n = 4) +static inline MatShape shape(const int* dims, const int n) { MatShape shape; shape.assign(dims, dims + n); @@ -132,6 +132,11 @@ static inline MatShape shape(const Mat& mat) return shape(mat.size.p, mat.dims); } +static inline MatShape shape(const MatSize& sz) +{ + return shape(sz.p, sz[-1]); +} + static inline MatShape shape(const UMat& mat) { return shape(mat.size.p, mat.dims); @@ -142,7 +147,7 @@ namespace {inline bool is_neg(int i) { return i < 0; }} static inline MatShape shape(int a0, int a1=-1, int a2=-1, int a3=-1) { int dims[] = {a0, a1, a2, a3}; - MatShape s = shape(dims); + MatShape s = shape(dims, 4); s.erase(std::remove_if(s.begin(), s.end(), is_neg), s.end()); return s; } diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index 8c52bc0aae..31b497528b 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -234,7 +234,7 @@ public: CV_Assert(ngroups > 0 && inpCn % ngroups == 0 && outCn % ngroups == 0); int dims[] = {inputs[0][0], outCn, out.height, out.width}; - outputs.resize(inputs.size(), shape(dims)); + outputs.resize(inputs.size(), shape(dims, 4)); return false; } @@ -1088,7 +1088,7 @@ public: CV_Assert(blobs[0].size[0] == inpCn); int dims[] = {inputs[0][0], outCn, outH, outW}; - outputs.resize(inputs.size(), shape(dims)); + outputs.resize(inputs.size(), shape(dims, 4)); internals.push_back(MatShape()); if (!is1x1()) diff --git a/modules/dnn/src/layers/pooling_layer.cpp b/modules/dnn/src/layers/pooling_layer.cpp index 0cb4e65943..bee9d5d62a 100644 --- a/modules/dnn/src/layers/pooling_layer.cpp +++ b/modules/dnn/src/layers/pooling_layer.cpp @@ -853,7 +853,7 @@ public: dims[0] = inputs[1][0]; // Number of proposals; dims[1] = psRoiOutChannels; } - outputs.assign(type == MAX ? 2 : 1, shape(dims)); + outputs.assign(type == MAX ? 2 : 1, shape(dims, 4)); return false; }