メインコンテンツまでスキップ

Polygons

Polygons(array: _Polygons, normalized: bool = False)

  • 説明

    Polygons は複数の多角形を表すクラスです。このクラスは、複数の多角形の座標を操作するためのさまざまなメソッドを提供します。これには、座標の正規化、反正規化、裁切り、移動、スケーリング、凸包への変換、最小外接矩形への変換、境界ボックスへの変換などが含まれます。

  • パラメータ

    • array (_Polygons):複数の多角形の座標。
    • normalized (bool):座標が正規化されているかどうか。デフォルトは False
  • 属性

    • normalized:多角形が正規化されているかどうか。
    • moments:多角形のモーメント。
    • area:多角形の面積。
    • arclength:多角形の周長。
    • centroid:多角形の重心。
    • boundingbox:多角形の境界ボックス。
    • min_circle:多角形の最小外接円。
    • min_box:多角形の最小外接矩形。
    • orientation:多角形の向き。
    • min_box_wh:最小外接矩形の幅と高さ。
    • extent:多角形の占有率。
    • solidity:多角形の実質的な面積。
  • メソッド

    • copy():多角形オブジェクトをコピーします。
    • numpy():多角形を numpy 配列に変換します。
    • normalize(w: float, h: float):多角形の座標を正規化します。
    • denormalize(w: float, h: float):多角形の座標を反正規化します。
    • clip(xmin: int, ymin: int, xmax: int, ymax: int):多角形を裁切ります。
    • shift(shift_x: float, shift_y: float):多角形を移動させます。
    • scale(distance: int, join_style: JOIN_STYLE = JOIN_STYLE.mitre):多角形をスケールします。
    • to_convexhull():多角形を凸包に変換します。
    • to_min_boxpoints():多角形を最小外接矩形の座標に変換します。
    • to_box(box_mode: str = 'xyxy'):多角形を境界ボックスに変換します。
    • to_list(flatten: bool = False):多角形をリストに変換します。
    • is_empty(threshold: int = 3):多角形が空であるかどうかを判断します。
  • クラスメソッド

    • from_image(image: np.ndarray, mode: int = cv2.RETR_EXTERNAL, method: int = cv2.CHAIN_APPROX_SIMPLE):画像から多角形の座標を取得します。
    • cat(polygons_list: List["Polygons"]):複数の多角形リストを結合して 1 つの多角形リストにします。
  • import docsaidkit as D

    polygons = D.Polygons([
    [[10., 20.], [50, 20.], [50, 80.], [10., 80.]],
    [[60., 20.], [100, 20.], [100, 80.], [60., 80.]]
    ])
    print(polygons)
    # >>> Polygons(
    # [
    # Polygon([
    # [10. 20.]
    # [50. 20.]
    # [50. 80.]
    # [10. 80.]
    # ]),
    # Polygon([
    # [60. 20.]
    # [100. 20.]
    # [100. 80.]
    # [60. 80.]
    # ])
    # ]
    # )

    polygon1 = polygons.normalize(100, 100)
    print(polygon1)
    # >>> Polygons(
    # [
    # Polygon([
    # [0.1 0.2]
    # [0.5 0.2]
    # [0.5 0.8]
    # [0.1 0.8]
    # ]),
    # Polygon([
    # [0.6 0.2]
    # [1. 0.2]
    # [1. 0.8]
    # [0.6 0.8]
    # ])
    # ]
    # )

    polygon2 = polygons.denormalize(100, 100)
    print(polygon2)
    # >>> Polygons(
    # [
    # Polygon([
    # [1000. 2000.]
    # [5000. 2000.]
    # [5000. 8000.]
    # [1000. 8000.]
    # ]),
    # Polygon([
    # [6000. 2000.]
    # [10000. 2000.]
    # [10000. 8000.]
    # [6000. 8000.]
    # ])
    # ]
    # )

    polygon3 = polygons.clip(20, 20, 60, 60)
    print(polygon3)
    # >>> Polygons(
    # [
    # Polygon([
    # [20. 20.]
    # [50. 20.]
    # [50. 60.]
    # [20. 60.]
    # ]),
    # Polygon([
    # [60. 20.]
    # [60. 20.]
    # [60. 60.]
    # [60. 60.]
    # ])
    # ]
    # )

    polygon4 = polygons.shift(10, 10)
    print(polygon4)
    # >>> Polygons(
    # [
    # Polygon([
    # [20. 30.]
    # [60. 30.]
    # [60. 90.]
    # [20. 90.]
    # ]),
    # Polygon([
    # [ 70. 30.]
    # [110. 30.]
    # [110. 90.]
    # [ 70. 90.]
    # ])
    # ]
    # )


    polygon5 = polygons.scale(10)
    print(polygon5)
    # >>> Polygons(
    # [
    # Polygon([
    # [ 0. 10.]
    # [60. 10.]
    # [60. 90.]
    # [ 0. 90.]
    # ]),
    # Polygon([
    # [ 50. 10.]
    # [110. 10.]
    # [110. 90.]
    # [ 50. 90.]
    # ])
    # ]
    # )

    polygon6 = polygons.to_convexhull()
    print(polygon6)
    # >>> Polygons(
    # [
    # Polygon([
    # [50. 80.],
    # [10. 80.],
    # [10. 20.],
    # [50. 20.]
    # ]),
    # Polygon([
    # [100. 80.],
    # [ 60. 80.],
    # [ 60. 20.],
    # [100. 20.]
    # ])
    # ]
    # )

    polygon7 = polygons.to_min_boxpoints()
    print(polygon7)
    # >>> Polygons(
    # [
    # Polygon([
    # [10. 20.]
    # [50. 20.]
    # [50. 80.]
    # [10. 80.]
    # ]),
    # Polygon([
    # [ 60. 20.]
    # [100. 20.]
    # [100. 80.]
    # [ 60. 80.]
    # ])
    # ]
    # )

    polygon8 = polygons.to_boxes() # Polygonとはメソッド名が異なります
    print(polygon8)
    # >>> Boxes([[ 10. 20. 50. 80.], [ 60. 20. 100. 80.]]), BoxMode.XYXY

    polygon9 = polygons.to_list()
    print(polygon9)
    # >>> [
    # [
    # [10.0, 20.0],
    # [50.0, 20.0],
    # [50.0, 80.0],
    # [10.0, 80.0]
    # ],
    # [
    # [60.0, 20.0],
    # [100.0, 20.0],
    # [100.0, 80.0],
    # [60.0, 80.0]
    # ]
    # ]

    polygon10 = polygons.is_empty()
    print(polygon10)
    # >>> [False, False]