diff --git a/modules/core/include/opencv2/core/mat.inl.hpp b/modules/core/include/opencv2/core/mat.inl.hpp index 5f54d1ff8c..9b2da34e61 100644 --- a/modules/core/include/opencv2/core/mat.inl.hpp +++ b/modules/core/include/opencv2/core/mat.inl.hpp @@ -577,11 +577,9 @@ Mat::Mat(const std::vector<_Tp>& vec, bool copyData) #ifdef CV_CXX11 template inline Mat::Mat(const std::initializer_list<_Tp> list) - : flags(MAGIC_VAL | traits::Type<_Tp>::value | CV_MAT_CONT_FLAG), dims(2), rows((int)list.size()), - cols(1), data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0) + : Mat() { - if(list.size() == 0) - return; + CV_Assert(list.size() != 0); Mat((int)list.size(), 1, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); } @@ -590,11 +588,11 @@ Mat::Mat(const std::initializer_list sizes, const std::initializer_list<_Tp : Mat() { size_t size_total = 1; - int *sz = (int*)sizes.begin(); for(auto s : sizes) size_total *= s; - CV_Assert(list.size() != 0 || size_total == list.size()); - Mat((int)sizes.size(), sz, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); + CV_Assert(list.size() != 0); + CV_Assert(size_total == list.size()); + Mat((int)sizes.size(), (int*)sizes.begin(), traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); } #endif diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 14229acb2c..320e60d4d4 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -1724,6 +1724,10 @@ TEST(Mat, from_initializer_list) ASSERT_DOUBLE_EQ(cvtest::norm(A, B, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(A, C, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(B, C, NORM_INF), 0.); + + auto D = Mat_({2, 3}, {1, 2, 3, 4, 5, 6}); + EXPECT_EQ(2, D.rows); + EXPECT_EQ(3, D.cols); } TEST(Mat_, from_initializer_list)