Allow Matx static function to work with Vec.

pull/21684/head
Vincent Rabaud 3 years ago
parent a082375d57
commit 057c3da82a
  1. 20
      modules/core/include/opencv2/core/matx.hpp
  2. 16
      modules/core/include/opencv2/core/operations.hpp
  3. 10
      modules/core/test/test_mat.cpp

@ -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<typename _Tp, int cn> inline
Vec<_Tp, cn> Vec<_Tp, cn>::ones()
{
return Vec::all(1);
}
template<typename _Tp, int cn> inline
Vec<_Tp, cn> Vec<_Tp, cn>::zeros()
{
return Vec::all(0);
}
template<typename _Tp, int cn> inline
Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const
{

@ -220,6 +220,22 @@ Matx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b)
return M;
}
template<typename _Tp, int cn> 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<typename _Tp, int cn> 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<typename _Tp, int m, int n> inline
Matx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method, bool *p_is_ok /*= NULL*/) const
{

@ -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

Loading…
Cancel
Save