diff --git a/modules/core/src/matrix_wrap.cpp b/modules/core/src/matrix_wrap.cpp index e7362196c5..dd7922694d 100644 --- a/modules/core/src/matrix_wrap.cpp +++ b/modules/core/src/matrix_wrap.cpp @@ -728,7 +728,7 @@ bool _InputArray::empty(int i) const CV_Assert((size_t)i < mv->size()); return mv->at(i).empty(); } - else if (k == STD_VECTOR_MAT) { + else if (k == STD_VECTOR_UMAT) { auto umv = reinterpret_cast*>(obj); CV_Assert((size_t)i < umv->size()); return umv->at(i).empty(); diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index e0c4074545..f948fc23ae 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -1415,6 +1415,23 @@ TEST(Core_InputArray, empty) ASSERT_TRUE( _InputArray(data).empty() ); } +TEST(Core_InputArray, element_empty) +{ + Mat src = Mat::ones(2, 2, CV_8U); + + std::vector mats(2); + mats[1] = src; + InputArray matInput(mats); + EXPECT_TRUE(matInput.empty(0)); + EXPECT_FALSE(matInput.empty(1)); + + std::vector umats(2); + src.copyTo(umats[1]); + InputArray umatInput(umats); + EXPECT_NO_THROW({ EXPECT_TRUE(umatInput.empty(0)); }); + EXPECT_NO_THROW({ EXPECT_FALSE(umatInput.empty(1)); }); +} + TEST(Core_InputArray, convert_from_vector_over2GB) { applyTestTag(CV_TEST_TAG_MEMORY_6GB);