template class cv::Vec
Overview
Template class for short numerical vectors, a partial case of Matx. More…
#include <matx.hpp> template < typename _Tp, int cn > class Vec: public cv::Matx { public: // typedefs typedef _Tp value_type; // enums enum { depth = Matx<_Tp, cn, 1>::depth, channels = cn, type = CV_MAKETYPE(depth, channels), }; // construction Vec(); Vec(_Tp v0); Vec( _Tp v0, _Tp v1 ); Vec( _Tp v0, _Tp v1, _Tp v2 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9 ); Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13 ); Vec(const _Tp* values); Vec(const Vec<_Tp, cn>& v); Vec( const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp ); Vec( const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp ); template <typename _T2> Vec( const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp ); // methods template < typename _Tp1, typename _Tp2, int cn > static Vec<_Tp1, cn>& operator+=( Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b ); template < typename _Tp1, typename _Tp2, int cn > static Vec<_Tp1, cn>& operator-=( Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator+( const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator-( const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator*=( Vec<_Tp, cn>& a, int alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator*=( Vec<_Tp, cn>& a, float alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator*=( Vec<_Tp, cn>& a, double alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator/=( Vec<_Tp, cn>& a, int alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator/=( Vec<_Tp, cn>& a, float alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn>& operator/=( Vec<_Tp, cn>& a, double alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( const Vec<_Tp, cn>& a, int alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( int alpha, const Vec<_Tp, cn>& a ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( const Vec<_Tp, cn>& a, float alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( float alpha, const Vec<_Tp, cn>& a ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( const Vec<_Tp, cn>& a, double alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator*( double alpha, const Vec<_Tp, cn>& a ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator/( const Vec<_Tp, cn>& a, int alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator/( const Vec<_Tp, cn>& a, float alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator/( const Vec<_Tp, cn>& a, double alpha ); template < typename _Tp, int cn > static Vec<_Tp, cn> operator-(const Vec<_Tp, cn>& a); template <typename _Tp> Vec<_Tp, 4> operator*( const Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2 ); template <typename _Tp> Vec<_Tp, 4>& operator*=( Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2 ); Vec conj() const; Vec cross(const Vec& v) const; Vec mul(const Vec<_Tp, cn>& v) const; template <typename T2> operator Vec< T2, cn >() const; const _Tp& operator()(int i) const; _Tp& operator()(int i); const _Tp& operator[](int i) const; _Tp& operator[](int i); static Vec all(_Tp alpha); }; // direct descendants template <typename _Tp> class Scalar_;
Inherited Members
public: // typedefs typedef Matx<_Tp, shortdim, 1> diag_type; typedef Matx<_Tp, m, n> mat_type; typedef _Tp value_type; // enums enum { depth = DataType<_Tp>::depth, rows = m, cols = n, channels = rows*cols, type = CV_MAKETYPE(depth, channels), shortdim = (m <n ? m : n), }; // fields _Tp val[m *n]; // methods template < typename _Tp1, typename _Tp2, int m, int n > static Matx<_Tp1, m, n>& operator+=( Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b ); template < typename _Tp1, typename _Tp2, int m, int n > static Matx<_Tp1, m, n>& operator-=( Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator+( const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator-( const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n>& operator*=( Matx<_Tp, m, n>& a, int alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n>& operator*=( Matx<_Tp, m, n>& a, float alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n>& operator*=( Matx<_Tp, m, n>& a, double alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( const Matx<_Tp, m, n>& a, int alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( const Matx<_Tp, m, n>& a, float alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( const Matx<_Tp, m, n>& a, double alpha ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( int alpha, const Matx<_Tp, m, n>& a ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( float alpha, const Matx<_Tp, m, n>& a ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator*( double alpha, const Matx<_Tp, m, n>& a ); template < typename _Tp, int m, int n > static Matx<_Tp, m, n> operator-(const Matx<_Tp, m, n>& a); template < typename _Tp, int m, int n, int l > static Matx<_Tp, m, n> operator*( const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b ); template < typename _Tp, int m, int n > static Vec<_Tp, m> operator*( const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b ); template < typename _Tp, int m, int n > static bool operator==( const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b ); template < typename _Tp, int m, int n > static bool operator!=( const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b ); Matx<_Tp, m, 1> col(int i) const; double ddot(const Matx<_Tp, m, n>& v) const; diag_type diag() const; Matx<_Tp, m, n> div(const Matx<_Tp, m, n>& a) const; _Tp dot(const Matx<_Tp, m, n>& v) const; template < int m1, int n1 > Matx<_Tp, m1, n1> get_minor( int i, int j ) const; Matx<_Tp, n, m> inv( int method = DECOMP_LU, bool* p_is_ok = NULL ) const; Matx<_Tp, m, n> mul(const Matx<_Tp, m, n>& a) const; template <typename T2> operator Matx< T2, m, n >() const; const _Tp& operator()( int i, int j ) const; _Tp& operator()( int i, int j ); const _Tp& operator()(int i) const; _Tp& operator()(int i); template < int m1, int n1 > Matx<_Tp, m1, n1> reshape() const; Matx<_Tp, 1, n> row(int i) const; template <int l> Matx<_Tp, n, l> solve( const Matx<_Tp, m, l>& rhs, int flags = DECOMP_LU ) const; Vec<_Tp, n> solve( const Vec<_Tp, m>& rhs, int method ) const; Matx<_Tp, n, m> t() const; static Matx all(_Tp alpha); static Matx diag(const diag_type& d); static Matx eye(); static Matx ones(); static Matx randn( _Tp a, _Tp b ); static Matx randu( _Tp a, _Tp b ); static Matx zeros();
Detailed Documentation
Template class for short numerical vectors, a partial case of Matx.
This template class represents short numerical vectors (of 1, 2, 3, 4 … elements) on which you can perform basic arithmetical operations, access individual elements using [] operator etc. The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc., which elements are dynamically allocated in the heap.
The template takes 2 parameters: In addition to the universal notation like Vec<float, 3>, you can use shorter aliases for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.
It is possible to convert Vec <T,2> to/from Point_, Vec <T,3> to/from Point3_, and Vec <T,4> to CvScalar or Scalar_. Use operator[] to access the elements of Vec.
All the expected vector operations are also implemented:
- v1 = v2 + v3
- v1 = v2 - v3
- v1 = v2 * scale
- v1 = scale * v2
- v1 = -v2
- v1 += v2 and other augmenting operations
- v1 == v2, v1 != v2
- norm(v1) (euclidean norm) The Vec class is commonly used to describe pixel types of multi-channel arrays. See Mat for details.
Parameters:
_Tp | element type |
cn | the number of elements |
Construction
Vec()
default constructor
Vec(_Tp v0)
1-element vector constructor
Vec( _Tp v0, _Tp v1 )
2-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2 )
3-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3 )
4-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4 )
5-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5 )
6-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6 )
7-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7 )
8-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8 )
9-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9 )
10-element vector constructor
Vec( _Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13 )
14-element vector constructor
Methods
Vec conj() const
conjugation (makes sense for complex numbers and quaternions)
Vec cross(const Vec& v) const
cross product of the two 3D vectors.
For other dimensionalities the exception is raised
Vec mul(const Vec<_Tp, cn>& v) const
per-element multiplication
template <typename T2> operator Vec< T2, cn >() const
conversion to another data type
const _Tp& operator[](int i) const
element access