diff --git a/modules/core/include/opencv2/core/matx.hpp b/modules/core/include/opencv2/core/matx.hpp index f25c8bce57..be1c26bb64 100644 --- a/modules/core/include/opencv2/core/matx.hpp +++ b/modules/core/include/opencv2/core/matx.hpp @@ -378,6 +378,14 @@ public: Vec(const Vec<_Tp, cn>& v); static Vec all(_Tp alpha); + static Vec ones(); + static Vec randn(_Tp a, _Tp b); + static Vec randu(_Tp a, _Tp b); + static Vec zeros(); +#ifdef CV_CXX11 + static Vec diag(_Tp alpha) = delete; + static Vec eye() = delete; +#endif //! per-element multiplication Vec mul(const Vec<_Tp, cn>& v) const; @@ -1063,6 +1071,18 @@ Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha) return v; } +template inline +Vec<_Tp, cn> Vec<_Tp, cn>::ones() +{ + return Vec::all(1); +} + +template inline +Vec<_Tp, cn> Vec<_Tp, cn>::zeros() +{ + return Vec::all(0); +} + template inline Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const { diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index ef1808a8a1..4a393f51ba 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -220,6 +220,22 @@ Matx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b) return M; } +template inline +Vec<_Tp, cn> Vec<_Tp, cn>::randu(_Tp a, _Tp b) +{ + Vec<_Tp,cn> V; + cv::randu(V, Scalar(a), Scalar(b)); + return V; +} + +template inline +Vec<_Tp, cn> Vec<_Tp, cn>::randn(_Tp a, _Tp b) +{ + Vec<_Tp,cn> V; + cv::randn(V, Scalar(a), Scalar(b)); + return V; +} + template inline Matx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method, bool *p_is_ok /*= NULL*/) const { diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 041e7d979f..a264330bf3 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -2381,4 +2381,14 @@ TEST(Mat, ptrVecni_20044) EXPECT_EQ(int(6), *(ci)); } +TEST(Mat, VecMatx_4650) +{ + // Makes sure the following compiles. + cv::Vec3b a; + a = cv::Vec3b::ones(); + a = cv::Vec3b::zeros(); + a = cv::Vec3b::randn(0, 10); + a = cv::Vec3b::randu(0, 10); +} + }} // namespace