From 5728679fd50615640f9ed6ebc9369cb302ac0fe4 Mon Sep 17 00:00:00 2001 From: Alexey Smirnov Date: Tue, 22 Jan 2019 13:14:33 +0300 Subject: [PATCH] Merge pull request #13664 from smirnov-alexey:gapi_add_descrof_overloading * Add version of descr_of function taking vector of Mat * Overload descr_of function for cv::Mat * Add template function instead of copypasting and change tests a little --- modules/gapi/include/opencv2/gapi/gmat.hpp | 3 ++ modules/gapi/src/api/gmat.cpp | 25 ++++++++++++++ modules/gapi/test/gapi_desc_tests.cpp | 39 ++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/modules/gapi/include/opencv2/gapi/gmat.hpp b/modules/gapi/include/opencv2/gapi/gmat.hpp index 0fa53427d4..ce5d1a5604 100644 --- a/modules/gapi/include/opencv2/gapi/gmat.hpp +++ b/modules/gapi/include/opencv2/gapi/gmat.hpp @@ -133,6 +133,8 @@ static inline GMatDesc empty_gmat_desc() { return GMatDesc{-1,-1,{-1,-1}}; } class Mat; GAPI_EXPORTS GMatDesc descr_of(const cv::Mat &mat); GAPI_EXPORTS GMatDesc descr_of(const cv::UMat &mat); +GAPI_EXPORTS std::vector descr_of(const std::vector &vec); +GAPI_EXPORTS std::vector descr_of(const std::vector &vec); #endif // !defined(GAPI_STANDALONE) /** @} */ @@ -140,6 +142,7 @@ GAPI_EXPORTS GMatDesc descr_of(const cv::UMat &mat); namespace gapi { namespace own { class Mat; GAPI_EXPORTS GMatDesc descr_of(const Mat &mat); + GAPI_EXPORTS std::vector descr_of(const std::vector &vec); }}//gapi::own std::ostream& operator<<(std::ostream& os, const cv::GMatDesc &desc); diff --git a/modules/gapi/src/api/gmat.cpp b/modules/gapi/src/api/gmat.cpp index e8c528555f..0bb58dfe55 100644 --- a/modules/gapi/src/api/gmat.cpp +++ b/modules/gapi/src/api/gmat.cpp @@ -33,15 +33,35 @@ const cv::GOrigin& cv::GMat::priv() const return *m_priv; } +template std::vector vec_descr_of(const std::vector &vec) +{ + std::vector vec_descr; + for(auto& mat : vec){ + vec_descr.emplace_back(descr_of(mat)); + } + return vec_descr; +} + #if !defined(GAPI_STANDALONE) cv::GMatDesc cv::descr_of(const cv::Mat &mat) { return GMatDesc{mat.depth(), mat.channels(), {mat.cols, mat.rows}}; } + cv::GMatDesc cv::descr_of(const cv::UMat &mat) { return GMatDesc{ mat.depth(), mat.channels(),{ mat.cols, mat.rows } }; } + +std::vector cv::descr_of(const std::vector &vec) +{ + return vec_descr_of(vec); +} + +std::vector cv::descr_of(const std::vector &vec) +{ + return vec_descr_of(vec); +} #endif cv::GMatDesc cv::gapi::own::descr_of(const cv::gapi::own::Mat &mat) @@ -49,6 +69,11 @@ cv::GMatDesc cv::gapi::own::descr_of(const cv::gapi::own::Mat &mat) return GMatDesc{mat.depth(), mat.channels(), {mat.cols, mat.rows}}; } +std::vector cv::gapi::own::descr_of(const std::vector &vec) +{ + return vec_descr_of(vec); +} + namespace cv { std::ostream& operator<<(std::ostream& os, const cv::GMatDesc &desc) { diff --git a/modules/gapi/test/gapi_desc_tests.cpp b/modules/gapi/test/gapi_desc_tests.cpp index 711211da2a..26da1f7f71 100644 --- a/modules/gapi/test/gapi_desc_tests.cpp +++ b/modules/gapi/test/gapi_desc_tests.cpp @@ -40,6 +40,45 @@ TEST(GAPI_MetaDesc, MatDesc) EXPECT_EQ(480, desc2.size.height); } +TEST(GAPI_MetaDesc, VecMatDesc) +{ + std::vector vec1 = { + cv::Mat(240, 320, CV_8U)}; + + const auto desc1 = cv::descr_of(vec1); + EXPECT_EQ(CV_8U, desc1[0].depth); + EXPECT_EQ(1, desc1[0].chan); + EXPECT_EQ(320, desc1[0].size.width); + EXPECT_EQ(240, desc1[0].size.height); + + std::vector vec2 = { + cv::UMat(480, 640, CV_8UC3)}; + + const auto desc2 = cv::descr_of(vec2); + EXPECT_EQ(CV_8U, desc2[0].depth); + EXPECT_EQ(3, desc2[0].chan); + EXPECT_EQ(640, desc2[0].size.width); + EXPECT_EQ(480, desc2[0].size.height); +} + +TEST(GAPI_MetaDesc, VecOwnMatDesc) +{ + std::vector vec = { + cv::gapi::own::Mat(240, 320, CV_8U, nullptr), + cv::gapi::own::Mat(480, 640, CV_8UC3, nullptr)}; + + const auto desc = cv::gapi::own::descr_of(vec); + EXPECT_EQ(CV_8U, desc[0].depth); + EXPECT_EQ(1, desc[0].chan); + EXPECT_EQ(320, desc[0].size.width); + EXPECT_EQ(240, desc[0].size.height); + + EXPECT_EQ(CV_8U, desc[1].depth); + EXPECT_EQ(3, desc[1].chan); + EXPECT_EQ(640, desc[1].size.width); + EXPECT_EQ(480, desc[1].size.height); +} + TEST(GAPI_MetaDesc, Compare_Equal_MatDesc) { const auto desc1 = cv::GMatDesc{CV_8U, 1, {64, 64}};