> 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/ko/blocks/blocks/classical-computer-vision/image-contours.md).

# 이미지 윤곽선

OpenCV의 윤곽선 검출을 사용해 임계값이 적용된 이진 또는 그레이스케일 이미지에서 윤곽선(도형의 경계)을 감지하고 추출하며, 감지된 윤곽선을 이미지에 그린 뒤 좌표, 계층 정보, 개수를 포함한 윤곽선 데이터를 반환하여 도형 분석, 객체 경계 감지, 윤곽선 기반 이미지 처리 워크플로를 지원합니다.

## 이 블록의 작동 방식

이 블록은 이미지에서 윤곽선(연결된 도형의 경계)을 감지하고 시각화를 위해 이를 그립니다. 이 블록은:

1. 최상의 결과를 위해 임계값이 적용된(이진 또는 그레이스케일) 입력 이미지를 받습니다
2. 이미지가 컬러인 경우 그레이스케일로 변환합니다(BGR 컬러 이미지를 그레이스케일로 변환하여 처리)
3. OpenCV의 findContours 함수를 사용해 윤곽선을 감지합니다:
   * RETR\_EXTERNAL 검색 모드를 사용하여 외부 윤곽선만 찾습니다(도형의 바깥 경계)
   * CHAIN\_APPROX\_SIMPLE 근사 방법을 사용해 윤곽선 포인트를 압축합니다(중복 포인트를 줄임)
   * 닫힌 윤곽선 또는 열린 윤곽선을 형성하는 모든 연결된 경계점을 감지합니다
   * 윤곽선을 점 배열로 반환하고, 윤곽선 관계를 설명하는 계층 정보를 함께 반환합니다
4. 이미지에 감지된 윤곽선을 그립니다:
   * 시각화를 위해 그레이스케일 이미지를 다시 BGR 컬러 형식으로 변환합니다
   * 구성 가능한 선 두께를 사용해 이미지에 모든 윤곽선을 그립니다
   * 기본적으로 윤곽선에는 보라색(BGR에서 255, 0, 255)을 사용합니다
   * 시각적 검사를 위해 이미지에 윤곽선을 직접 그립니다
5. 이미지에서 감지된 총 윤곽선 수를 셉니다
6. 윤곽선이 그려진 이미지, 윤곽선 데이터(점 배열), 계층 정보, 윤곽선 개수를 반환합니다

이 블록은 객체가 흰색이고 배경이 검은색인(또는 그 반대인) 임계값 적용 이진 이미지를 입력으로 기대하며, 이는 최적의 윤곽선 검출을 위해 필요합니다. 윤곽선은 서로 다른 픽셀 강도 영역 사이의 경계로 감지됩니다. RETR\_EXTERNAL 모드는 내부 구멍은 무시하고 외부 경계에만 집중하므로 개별 객체를 감지하는 데 유용합니다. CHAIN\_APPROX\_SIMPLE 방법은 직선 구간의 중복 포인트를 제거하여 윤곽선 데이터를 더 간결하게 만들면서도 핵심 도형 정보는 유지합니다.

## 일반적인 사용 사례

* **도형 감지 및 분석**: 경계선을 찾아 이미지 속 도형을 감지하고 분석합니다(예: 도형 분석을 위해 객체 경계 감지, 기하학적 도형 식별, 측정을 위한 도형 윤곽 추출), 도형 기반 이미지 분석 워크플로를 지원합니다
* **객체 경계 추출**: 임계값이 적용된 이미지에서 객체 경계와 윤곽을 추출합니다(예: 후속 처리를 위한 객체 경계 추출, 객체 가장자리 식별, 이진 이미지에서 객체 윤곽 감지), 경계 추출 워크플로를 지원합니다
* **이미지 분할 분석**: 윤곽선 경계를 감지해 분할 결과를 분석합니다(예: 분할 마스크에서 윤곽선 찾기, 분할된 영역 분석, 분할 객체에서 경계 추출), 분할 분석 워크플로를 지원합니다
* **품질 관리 및 검사**: 윤곽선 검출을 품질 관리 및 검사 작업에 사용합니다(예: 예상치 못한 윤곽선을 찾아 결함 감지, 객체 형태 검증, 객체 경계 검사), 윤곽선 기반 품질 관리 워크플로를 지원합니다
* **객체 개수 세기**: 윤곽선을 감지하여 이미지 속 객체 수를 셉니다(예: 윤곽선 감지로 객체 수 세기, 경계를 기준으로 객체 열거, 윤곽선 검출로 항목 수량화), 윤곽선 기반 객체 계수 워크플로를 지원합니다
* **측정 및 분석**: 윤곽선을 사용해 측정과 기하학적 분석을 수행합니다(예: 윤곽선을 이용한 객체 둘레 측정, 객체 형태 분석, 윤곽선으로부터 기하학적 특성 계산), 윤곽선 기반 측정 워크플로를 지원합니다

## 다른 블록에 연결하기

이 블록은 임계값이 적용된 이미지를 입력받아 윤곽선 데이터와 시각화를 생성합니다:

* **이미지 임계값 처리 블록 이후** 임계값이 적용된 이진 이미지에서 윤곽선을 감지하기 위해(예: 임계값 적용 후 윤곽선 찾기, 이진 이미지의 도형 감지, 임계값 처리된 이미지에서 경계 추출), 임계값→윤곽선 워크플로를 지원합니다
* **이미지 전처리 블록 이후** 윤곽선 검출을 위해 이미지를 준비하는 데 사용됩니다(예: 전처리 후 윤곽선 감지, 필터링 후 도형 찾기, 향상 후 경계 추출), 전처리된 윤곽선 검출 워크플로를 지원합니다
* **분할 블록 이후** 분할 결과에서 윤곽선을 추출하기 위해(예: 분할 마스크에서 윤곽선 찾기, 분할된 영역의 경계 감지, 분할된 객체에서 도형 윤곽 추출), 분할→윤곽선 워크플로를 지원합니다
* **시각화 블록 이전** 윤곽선 시각화를 표시하기 위해(예: 감지된 윤곽선 시각화, 도형 경계 표시, 윤곽선 분석 결과 표시), 윤곽선 시각화 워크플로를 지원합니다
* **분석 블록 앞에** 윤곽선 데이터를 처리하는 데 사용됩니다(예: 윤곽선 형태 분석, 윤곽선 좌표 처리, 윤곽선 특성 측정), 윤곽선 분석 워크플로를 지원합니다
* **필터링 또는 로직 블록 전에** 윤곽선 개수나 속성을 의사결정에 사용하는 블록(예: 윤곽선 개수를 기준으로 필터링, 감지된 도형에 따라 결정, 윤곽선 속성을 기반으로 로직 적용), 윤곽선 기반 조건부 워크플로를 지원합니다

## 요구 사항

이 블록을 사용하기 전에 입력 이미지는 임계값이 적용되어야 합니다(이진/그레이스케일로 변환). 임계값이 적용된 이미지는 전경(흰색)과 배경(검은색) 영역이 뚜렷하여 윤곽선 검출의 신뢰도가 높아집니다. 윤곽선 검출 전에 이미지 준비를 위해 임계값 블록(예: Image Threshold) 또는 분할 블록을 사용하세요.

### 유형 식별자

단계에서 다음 식별자를 사용하세요 `"type"` 필드: `roboflow_core/contours_detection@v1` 워크플로우에 이 블록을 단계로 추가하려면.

### 속성

| **이름** | **유형** | **설명**                                                                                                                                                                                                                                                                           | 참조 |
| ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name` | `str`  | 이 단계에 대한 고유 식별자를 입력하세요..                                                                                                                                                                                                                                                         | ❌  |
| `선 두께` | `정수`   | 출력 이미지에 윤곽선을 그릴 때 사용하는 선의 두께입니다. 양의 정수여야 합니다. 더 두꺼운 선(예: 5-10)은 윤곽선을 더 잘 보이게 하지만 세부 사항을 가릴 수 있습니다. 더 얇은 선(예: 1-2)은 더 많은 세부 사항을 보여주지만 보기 어려울 수 있습니다. 기본값은 3이며, 적절한 가시성을 제공합니다. 이미지 크기와 원하는 가시성에 맞게 조정하세요. 큰 이미지나 윤곽선을 매우 잘 보이게 해야 할 때는 더 두꺼운 선을, 세부 분석이나 작은 이미지에는 더 얇은 선을 사용하세요.. | ✅  |

이 **참조** 열은 워크플로우 런타임에서 사용 가능한 동적 값으로 속성을 매개변수화할 수 있는 가능성을 나타냅니다 `워크플로우` 런타임입니다. 자세한 내용은 *바인딩* 을 참조하세요.

### 입력 및 출력 바인딩

사용 가능한 연결은 바인딩 유형에 따라 달라집니다. 어떤 바인딩 유형인지 확인하세요 `이미지 윤곽` 버전 `v1` 을 가지고 있는지.

<details>

<summary>입력 및 출력 바인딩</summary>

* 입력
  * `이미지` ([*`이미지`*](/workflows/ko/developer-guide/developer-guide/kinds/image.md)): 윤곽선을 감지할 입력 이미지입니다. 최상의 결과를 위해 임계값이 적용된(이진 또는 그레이스케일) 이미지여야 합니다. 임계값이 적용된 이미지는 윤곽선 검출을 더 신뢰할 수 있게 만드는 뚜렷한 전경과 배경 영역을 가집니다. 이미지가 컬러 형식이면 자동으로 그레이스케일로 변환됩니다. 윤곽선은 서로 다른 픽셀 강도 영역 사이의 경계로 감지됩니다. 윤곽선 검출 전에 이미지를 준비하려면 임계값 블록(예: Image Threshold) 또는 분할 블록을 사용하세요. 이 블록은 외부 윤곽선(바깥 경계)을 감지하여 이미지에 그립니다..
  * `선 두께` ([*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 출력 이미지에 윤곽선을 그릴 때 사용하는 선의 두께입니다. 양의 정수여야 합니다. 더 두꺼운 선(예: 5-10)은 윤곽선을 더 잘 보이게 하지만 세부 사항을 가릴 수 있습니다. 더 얇은 선(예: 1-2)은 더 많은 세부 사항을 보여주지만 보기 어려울 수 있습니다. 기본값은 3이며, 적절한 가시성을 제공합니다. 이미지 크기와 원하는 가시성에 맞게 조정하세요. 큰 이미지나 윤곽선을 매우 잘 보이게 해야 할 때는 더 두꺼운 선을, 세부 분석이나 작은 이미지에는 더 얇은 선을 사용하세요..
* 출력
  * `이미지` ([`이미지`](/workflows/ko/developer-guide/developer-guide/kinds/image.md)): 워크플로의 이미지입니다.
  * `contours` ([`contours`](/workflows/ko/developer-guide/developer-guide/kinds/contours.md)): 각 배열이 윤곽선 포인트를 나타내는 numpy 배열 목록입니다.
  * `계층` ([`numpy_array`](/workflows/ko/developer-guide/developer-guide/kinds/numpy-array.md)): Numpy 배열.
  * `윤곽선 개수` ([`정수`](/workflows/ko/developer-guide/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>
