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