> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/classical-computer-vision/image-contours.md).

# 画像輪郭

OpenCVの輪郭検出を使用して、閾値処理済みの二値画像またはグレースケール画像から輪郭（図形の境界）を検出・抽出し、検出した輪郭を画像上に描画し、座標、階層情報、輪郭数を含む輪郭データを返して、形状解析、物体境界検出、輪郭ベースの画像処理ワークフローに利用します。

## このブロックの仕組み

このブロックは、画像内の輪郭（図形の連結した境界）を検出し、可視化のために描画します。このブロックは次の処理を行います：

1. 最良の結果を得るには、入力画像は閾値処理済み（2値またはグレースケール）である必要があります
2. 色付きの場合は画像をグレースケールに変換します（BGRカラー画像はグレースケールに変換して処理します）
3. OpenCVのfindContours関数を使用して輪郭を検出します：
   * RETR\_EXTERNAL取得モードを使用して、外側の輪郭のみを検出します（図形の外周境界）
   * CHAIN\_APPROX\_SIMPLE近似法を使用して輪郭点を圧縮します（冗長な点を削減します）
   * 閉じた輪郭または開いた輪郭を形成する、接続されたすべての境界点を検出します
   * 輪郭を点の配列として返し、輪郭間の関係を示す階層情報も返します
4. 画像上に検出した輪郭を描画します：
   * 可視化のためにグレースケール画像をBGRカラー形式に戻します
   * 設定可能な線の太さを使って、すべての輪郭を画像上に描画します
   * 輪郭線には、デフォルトで紫色（BGRで255, 0, 255）を使用します
   * 目視確認のために輪郭を画像に直接描画します
5. 画像内で検出された輪郭の総数を数えます
6. 輪郭を描画した画像、輪郭データ（点の配列）、階層情報、および輪郭数を返します

このブロックは、物体が白、背景が黒（またはその逆）になっている閾値処理済みの画像を想定しており、最適な輪郭検出を行います。輪郭は、異なるピクセル強度領域の境界として検出されます。RETR\_EXTERNALモードは内側の穴を無視して外側の境界にのみ注目するため、個別の物体を検出するのに役立ちます。CHAIN\_APPROX\_SIMPLE法は直線上の冗長な点を除去して輪郭を簡略化し、重要な形状情報を保ちながら輪郭データをよりコンパクトにします。

## 一般的な使用例

* **形状検出と解析**: 境界を見つけて画像内の形状を検出・解析します（例：形状解析のために物体境界を検出、幾何学的な形状を識別、計測用に形状の輪郭を抽出する）ことで、形状ベースの画像解析ワークフローを実現します
* **物体境界抽出**: 閾値処理済み画像から物体の境界と輪郭を抽出します（例：後続処理のために物体境界を抽出、物体のエッジを特定、二値画像内の物体輪郭を検出する）ことで、境界抽出ワークフローを実現します
* **画像セグメンテーション解析**: 輪郭境界を検出してセグメンテーション結果を解析します（例：セグメンテーションマスクから輪郭を検出、分割された領域を解析、セグメント化された物体から境界を抽出する）ことで、セグメンテーション解析ワークフローを実現します
* **品質管理と検査**: 輪郭検出を品質管理・検査タスクに利用します（例：予期しない輪郭を見つけて欠陥を検出、物体形状を検証、物体境界を検査する）ことで、輪郭ベースの品質管理ワークフローを実現します
* **物体数のカウント**: 輪郭を検出することで画像内の物体数を数えます（例：輪郭を検出して物体を数える、境界に基づいて物体を列挙する、輪郭検出を使って個数を定量化する）ことで、輪郭ベースの物体カウントワークフローを実現します
* **測定と解析**: 輪郭を計測と幾何学的解析に利用します（例：輪郭を使って物体の周囲長を測定、物体形状を解析、輪郭から幾何学的特性を算出する）ことで、輪郭ベースの計測ワークフローを実現します

## 他のブロックへの接続

このブロックは閾値処理済み画像を受け取り、輪郭データと可視化結果を生成します：

* **画像のしきい値処理ブロックの後で** : 閾値処理済みの二値画像から輪郭を検出します（例：閾値処理後に輪郭を見つける、二値画像内の形状を検出する、閾値処理済み画像から境界を抽出する）ことで、閾値処理から輪郭抽出へのワークフローを実現します
* **画像前処理ブロックの後** : 輪郭検出のために画像を準備します（例：前処理後に輪郭を検出、フィルタリング後に形状を見つける、強調後に境界を抽出する）ことで、前処理済み輪郭検出ワークフローを実現します
* **セグメンテーションブロックの後に** : セグメンテーション結果から輪郭を抽出します（例：セグメンテーションマスクから輪郭を見つける、分割領域の境界を検出する、セグメントから形状の輪郭を抽出する）ことで、セグメンテーションから輪郭抽出へのワークフローを実現します
* **可視化ブロックの前** : 輪郭の可視化を表示します（例：検出した輪郭を可視化する、形状の境界を表示する、輪郭解析の結果を示す）ことで、輪郭可視化ワークフローを実現します
* **分析ブロックの前** : 輪郭データを処理します（例：輪郭形状を解析、輪郭座標を処理、輪郭の特性を測定する）ことで、輪郭解析ワークフローを実現します
* **フィルタリングまたはロジックブロックの前に** : 輪郭数や特性を意思決定に使用します（例：輪郭数に基づいてフィルタリング、検出された形状に基づいて判断、輪郭特性に基づいてロジックを適用する）ことで、輪郭ベースの条件分岐ワークフローを実現します

## 要件

入力画像は、このブロックを使用する前に閾値処理（2値化/グレースケール化）する必要があります。閾値処理済み画像には、前景（白）と背景（黒）の領域が明確に分かれているため、輪郭検出の信頼性が高まります。輪郭検出の前に、閾値処理ブロック（例：Image Threshold）またはセグメンテーションブロックを使って画像を準備してください。

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/contours_detection@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**           | **型** | **説明**                                                                                                                                                                                                                | 参照 |
| ---------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`           | `str` | このステップの一意の識別子を入力してください。                                                                                                                                                                                               | ❌  |
| `line_thickness` | `整数`  | 出力画像に輪郭を描画するために使用する線の太さ。正の整数でなければなりません。太い線（例：5〜10）は輪郭を見やすくしますが、細部を隠す場合があります。細い線（例：1〜2）はより多くの詳細を示しますが、見えにくいことがあります。デフォルトは3で、視認性に優れています。画像サイズと必要な見やすさに応じて調整してください。大きな画像や輪郭を非常に見やすくしたい場合は太い線を、詳細な解析や小さな画像の場合は細い線を使用します.. | ✅  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `画像の輪郭` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `image` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)): 輪郭を検出するための入力画像です。最良の結果を得るには閾値処理済み（2値またはグレースケール）である必要があります。閾値処理済み画像は前景と背景の領域が明確に分かれているため、輪郭検出の信頼性が高まります。画像がカラー形式の場合は自動的にグレースケールに変換されます。輪郭は、異なるピクセル強度領域の境界として検出されます。輪郭検出の前に、閾値処理ブロック（例：Image Threshold）またはセグメンテーションブロックを使って画像を準備してください。このブロックは外側の輪郭（外周境界）を検出し、画像上に描画します..
  * `line_thickness` ([*`整数`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 出力画像に輪郭を描画するために使用する線の太さ。正の整数でなければなりません。太い線（例：5〜10）は輪郭を見やすくしますが、細部を隠す場合があります。細い線（例：1〜2）はより多くの詳細を示しますが、見えにくいことがあります。デフォルトは3で、視認性に優れています。画像サイズと必要な見やすさに応じて調整してください。大きな画像や輪郭を非常に見やすくしたい場合は太い線を、詳細な解析や小さな画像の場合は細い線を使用します..
* 出力
  * `image` ([`image`](/workflows/ja/gaido/developer-guide/kinds/image.md)): ワークフロー内の画像。
  * `contours` ([`contours`](/workflows/ja/gaido/developer-guide/kinds/contours.md)各配列が輪郭点を表す numpy 配列のリスト。
  * `階層` ([`numpy_array`](/workflows/ja/gaido/developer-guide/kinds/numpy-array.md))：Numpy 配列。
  * `輪郭数` ([`整数`](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：整数値。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/contours_detection@v1",
	    "image": "$inputs.image",
	    "line_thickness": 3
	}
```

</details>
