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