cv::Sizeのメンバ関数area()

OpenCVでは矩形の大きさを表現するときにcv::Sizeクラスが使われる.
リファレンスを読むと,

template class Size_
{
public:
    typedef _Tp value_type;
    Size_();
    Size_(_Tp _width, _Tp _height);
    Size_(const Size_& sz);
    Size_(const CvSize& sz);
    Size_(const CvSize2D32f& sz);
    Size_(const Point_<_Tp>& pt);
    Size_& operator = (const Size_& sz);
    _Tp area() const;
    operator Size_() const;
    operator Size_() const;
    operator Size_() const;
    operator CvSize() const;
    operator CvSize2D32f() const;
    _Tp width, height;
};
typedef Size_ Size2i;
typedef Size2i Size;
typedef Size_ Size2f;

となっていて,cv::Size, cv::Size2iはint型,cv::Size2fはfloat型で定義されている.そして,それぞれメンバ width と height が矩形の幅と高さを表す.
今まで,矩形の大きさ(面積)を比較する場合,例えば

cv::Size a, b;

に対して,

if( a.width*a.height < b.width*b.height){ … }

としていたが,メンバ関数の area() があることに気づいた.これを使うと,

if( a.area() < b.area() ){ … }

と書くことができ,非常にスッキリと条件式が書けた.ちなみに, area() はcv::Size を表現する型が int 型なら int 型を, float 型なら float 型を返す関数になっている.

コメントする