|
|
|
@ -55,6 +55,7 @@ static void computeShapeByReshapeMask(const MatShape &srcShape, |
|
|
|
|
{ |
|
|
|
|
int srcShapeSize = (int)srcShape.size(); |
|
|
|
|
int maskShapeSize = (int)maskShape.size(); |
|
|
|
|
int maskTotal = abs(total(maskShape)); // Mask might have negative ones.
|
|
|
|
|
|
|
|
|
|
if (srcRange == Range::all()) |
|
|
|
|
srcRange = Range(0, srcShapeSize); |
|
|
|
@ -65,6 +66,19 @@ static void computeShapeByReshapeMask(const MatShape &srcShape, |
|
|
|
|
srcRange.end = srcRange.end == INT_MAX ? srcShapeSize : srcRange.start + sz; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (maskTotal != 0) |
|
|
|
|
{ |
|
|
|
|
for (int i = srcRange.start + 1; i < srcRange.end; ++i) |
|
|
|
|
{ |
|
|
|
|
if (total(srcShape, i, srcRange.end) != maskTotal) |
|
|
|
|
{ |
|
|
|
|
srcRange.start = i - 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
CV_Assert(total(srcShape, srcRange.start, srcRange.end) == maskTotal); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CV_Assert(0 <= srcRange.start && srcRange.start <= srcRange.end && srcRange.end <= srcShapeSize); |
|
|
|
|
int dstShapeSize = srcShapeSize - srcRange.size() + maskShapeSize; |
|
|
|
|
dstShape.resize(dstShapeSize); |
|
|
|
|