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 型を返す関数になっている.