[OpenCV] Scalar 클래스

OpenCV에서 Scalar 클래스에 대해 알아보겠습니다.

Scalar 클래스는 이전에 설명한 것처럼 영상의 픽셀 값(=행렬의 원소값)을 표현하는 용도로 주로 사용 됩니다.
Scalar 클래스는 Scalar_ 의 템플릿 재정의이고 Vec클래스를 상속받았습니다.

template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
    //! default constructor
    Scalar_();
    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
    Scalar_(_Tp v0);

    Scalar_(const Scalar_& s);
    Scalar_(Scalar_&& s) CV_NOEXCEPT;

    Scalar_& operator=(const Scalar_& s);
    Scalar_& operator=(Scalar_&& s) CV_NOEXCEPT;

    template<typename _Tp2, int cn>
    Scalar_(const Vec<_Tp2, cn>& v);

    //! returns a scalar with all elements set to v0
    static Scalar_<_Tp> all(_Tp v0);

    //! conversion to another data type
    template<typename T2> operator Scalar_<T2>() const;

    //! per-element product
    Scalar_<_Tp> mul(const Scalar_<_Tp>& a, double scale=1 ) const;

    //! returns (v0, -v1, -v2, -v3)
    Scalar_<_Tp> conj() const;

    //! returns true iff v1 == v2 == v3 == 0
    bool isReal() const;
};

typedef Scalar_<double> Scalar;

Scalar은 아래와 같이 생성 가능합니다.

Scalar(0~255) // 밝기
Scalar(B,G,R) // 3색
Scalar(B,G,R,Transparent) // 3색, 투명도

Scalar 또한 <<연산이 가능합니다.

Scalar white( 255 );
cout << "white : " << white << endl;

Scalar red( 0, 0, 255 );
cout << "red : " << red << endl;

Mat img( 100, 100, CV_8UC3, red ); // 초기화