diff --git a/modules/core/src/array.cpp b/modules/core/src/array.cpp index 252ac13ca0..db8f8c1bb4 100644 --- a/modules/core/src/array.cpp +++ b/modules/core/src/array.cpp @@ -2660,7 +2660,7 @@ cvReshapeMatND( const CvArr* arr, mat = &stub; } - if( CV_IS_MAT_CONT( mat->type )) + if( !CV_IS_MAT_CONT( mat->type )) CV_Error( cv::Error::StsBadArg, "Non-continuous nD arrays are not supported" ); size1 = mat->dim[0].size; diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 846bff6d94..dfd17db8d1 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -2626,6 +2626,24 @@ TEST(Mat1D, DISABLED_basic) } } +TEST(Mat, regression_cvReshapeMatND_continuous) +{ + int sizes[] = {2, 3, 4}; + Mat mat(3, sizes, CV_32SC1); + CvMatND src = cvMatND(mat); + CvMatND reshaped; + int new_sizes[] = {4, 3, 2}; + CvArr* result = 0; + + ASSERT_NO_THROW(result = cvReshapeMatND(&src, sizeof(reshaped), &reshaped, 0, 3, new_sizes)); + ASSERT_NE((CvArr*)0, result); + EXPECT_EQ(3, reshaped.dims); + EXPECT_EQ(new_sizes[0], reshaped.dim[0].size); + EXPECT_EQ(new_sizes[1], reshaped.dim[1].size); + EXPECT_EQ(new_sizes[2], reshaped.dim[2].size); + EXPECT_EQ(src.data.ptr, reshaped.data.ptr); +} + TEST(Mat, ptrVecni_20044) { Mat_ m(3,4); m << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;