Pynote

Python、機械学習、画像処理について

OpenCV - cv::Rect 長方形を表すクラス

長方形を表すクラス。

template<typename _Tp> class Rect_<_Tp>
typedef Rect_<int> Rect2i    // (1)
typedef Rect_<float> Rect2f  // (2)
typedef Rect_<double> Rect2d // (3)
typedef Rect2i Rect          // (4)

(1) int 型の大きさ
(2) float 型の大きさ
(3) double 型の大きさ
(4) int 型の大きさ

要素

x, y, width, height で値にアクセスする。

cv::Rect a{10, 10, 100, 200}; // topleft=(10, 10), (width, height)=(100, 200)

std::cout << a.x << ", " << a.y << std::endl;          // 10, 10
std::cout << a.width << ", " << a.height << std::endl; // 110, 210
Point_<_Tp> Rect_<_Tp>::tl() const  (1)
Point_<_Tp> Rect_<_Tp>::br() const  (2)
Size_<_Tp> Rect_<_Tp>::size() const (3)

(1) 長方形の左上の点を取得する。
(2) 長方形の右下の点を取得する。
(3) 長方形の大きさを取得する。

cv::Rect a{10, 10, 100, 200};

// (1)
std::cout << a.tl() << std::endl; // [10, 10]

// (2)
std::cout << a.br() << std::endl; // [110, 210]

// (3)
std::cout << a.size() << std::endl; // [100 x 200]
コンストラクタ
Rect_<_Tp>::Rect_()                                               // (1)
Rect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)        // (2)
Rect_<_Tp>::Rect_(const Rect_<_Tp> &r)                            // (3)
Rect_<_Tp>::Rect_(const Point_<_Tp> &org, const Size_<_Tp> &sz)   // (4)
Rect_<_Tp>::Rect_(const Point_<_Tp> &pt1, const Point_<_Tp> &pt2) // (5)
Rect_<_Tp> &Rect_<_Tp>::operator=(const Rect_<_Tp> &r)            // (6)

(1) 左上の点が (0, 0)、幅、高さが (0, 0) である長方形。
(2) 左上の点が (x, y)、幅、高さが (width, height) である長方形。
(3) コピーコンストラクタ。 r と同じ長方形。
(4) 左上の点が org、幅、高さが sz である長方形。
(5) 左上の点が pt1、右下の点が pt2 である長方形。
(6) 代入演算子。 r と同じ長方形。

cv::Rect a{};                                       // (1)
cv::Rect b{10, 10, 100, 200};                       // (2)
cv::Rect c{a};                                      // (3)
cv::Rect d{cv::Point(10, 20), cv::Size(100, 200)};  // (4)
cv::Rect d{cv::Point(10, 20), cv::Point(110, 210)}; // (5)
演算子
Rect_<_Tp> &operator+=(Rect_<_Tp> &a, const Point_<_Tp> &b) // (1)
Rect_<_Tp> &operator-=(Rect_<_Tp> &a, const Point_<_Tp> &b) // (2)
Rect_<_Tp> &operator+=(Rect_<_Tp> &a, const Size_<_Tp> &b)  // (3)
Rect_<_Tp> &operator-=(Rect_<_Tp> &a, const Size_<_Tp> &b)  // (4)
Rect_<_Tp> &operator&=(Rect_<_Tp> &a, const Rect_<_Tp> &b)  // (5)
Rect_<_Tp> &operator|=(Rect_<_Tp> &a, const Rect_<_Tp> &b)  // (6)

(1) rect += point (長方形の左上の点を +point だけ移動する)
(2) rect -= point (長方形の左上の点を -point だけ移動する)
(3) rect += size (長方形の大きさを +size だけ拡大する)
(4) rect -= size (長方形の大きさを -size だけ縮小する)
(5) rect1 &= rect2 (rect1 と rect2 の共通部分を rect1 とする)
(6) rect1 |= rect2 (rect1 と rect2 が両方収まる長方形を rect1 とする)

bool operator==(const Rect_<_Tp> &a, const Rect_<_Tp> &b) // (7)
bool operator!=(const Rect_<_Tp> &a, const Rect_<_Tp> &b) // (8)

(9) rect1 == rect2
(10) rect1 != rect2

Rect_<_Tp> operator+(const Rect_<_Tp> &a, const Point_<_Tp> &b) // (10)
Rect_<_Tp> operator-(const Rect_<_Tp> &a, const Point_<_Tp> &b) // (11)
Rect_<_Tp> operator+(const Rect_<_Tp> &a, const Size_<_Tp> &b)  // (12)
Rect_<_Tp> operator&(const Rect_<_Tp> &a, const Rect_<_Tp> &b)  // (13)
Rect_<_Tp> operator|(const Rect_<_Tp> &a, const Rect_<_Tp> &b)  // (14)

(10) rect + point (長方形の左上の点を +point だけ移動する)
(11) rect - point (長方形の左上の点を -point だけ移動する)
(12) rect += size (長方形の大きさを +size だけ拡大する)
(13) rect1 & rect2 (rect1 と rect2 の共通部分をとる)
(14) rect1 | rect2 (rect1 と rect2 が両方収まる長方形をとる)

Rect_<_Tp>::operator Rect_<_Tp2>() const // (15)

(15) Rect2i, Rect2f, Rect2d 間のキャスト

計算
_Tp Rect_<_Tp>::area() const                                     // (1)
bool Rect_<_Tp>::empty() const                                   // (2)
bool Rect_<_Tp>::contains(const Point_<_Tp> &pt) const           // (3)
double jaccardDistance(const Rect_<_Tp> &a, const Rect_<_Tp> &b) // (4)

(1) 面積 (width * height)
(2) 無効な大きさかどうか (width <= 0 || height <= 0)
(3) 点 pt が長方形に含まれるかどうか
(4) 長方形 a と b の Jaccard 距離を計算する。
https://en.wikipedia.org/wiki/Jaccard_index:Jaccard index (Wikipedia)

回転した長方形を表すクラス。

class RotatedRect
要素

center, size, angle で値にアクセスする。

// 中心=(1.2, 1.2), 大きさ=(100, 200)、時計回りの回転量=90°
cv::RotatedRect a{cv::Point2f(1.2, 1.2), cv::Size2f(100, 200), 90.};

std::cout << a.center << std::endl; // [1.2, 1.2]
std::cout << a.size << std::endl;   // [100 x 200]
std::cout << a.angle << std::endl;  // 90.
void points(Point2f pts[]) const;

長方形の4点を取得する。

コンストラクタ
RotatedRect::RotatedRect()                                                        // (1)
RotatedRect(const Point2f &_center, const Size2f &_size, float _angle)            // (2)
RotatedRect(const Point2f &point1, const Point2f &point2, const Point2f &point3); // (3)

(1) 左上の点が (0, 0)、大きさが (0, 0)、時計回りの回転量が 0° である長方形。
(2) 左上の点が _center、大きさが _size、時計回りの回転量が _angle° である長方形。
(3) 時計回りまたは反時計回りに順番に与えられた3点から回転した長方形を作成する。

cv::RotatedRect a{};                                                                    // (1)
cv::RotatedRect b{cv::Point2f(1.2, 1.2), cv::Size2f(100, 200), 90.};                    // (2)
cv::RotatedRect c{cv::Point2f(1.2, 1.2), cv::Point2f(3.2, 3.2), cv::Point2f(5.2, 5.2)}; // (3)
計算
Rect boundingRect() const           (1)
Rect_<float> boundingRect2f() const (2)

(1) 回転した長方形を囲む長方形 (int型) を返す。
(2) 回転した長方形を囲む長方形 (double型) を返す。