5.8. 플러드 필(flood fill)과 검출 글리프

이 절 앞부분의 기하학적 프리미티브는 응용 프로그램이 이미 알고 있는 위치에 표시를 남깁니다. 이미지 합성은 한 이미지를 다른 이미지 위에 올립니다. 마지막의 작은 그리기 메서드 그룹은 다른 일을 합니다. 이미지에 이미 들어 있는 것, 또는 이전 알고리즘이 그 안에서 찾아낸 것에 형태가 좌우되는 표시를 남깁니다.

5.8.1. 플러드 필

flood_fill() 은 단일 픽셀, 즉 시드(seed)에서 시작하여 바깥으로 확장하며, 시드와 충분히 유사하고 다른 유사한 픽셀들의 사슬을 통해 시드와 연결된 모든 픽셀을 칠합니다. 그 결과는 경계가 호출에 전달된 어떤 것이 아니라 이미지 자체에 의해 결정되는 채워진 영역입니다.

가장 단순한 형태는 시드 좌표와 채울 색상을 받습니다:

img.flood_fill(x=160, y=120, color=(0, 255, 0))

두 개의 임계값 파라미터가 채우기가 얼마나 적극적으로 확장되는지를 제어합니다. seed_threshold (0.0 에서 1.0 까지의 정규화된 비율)는 픽셀이 원본 시드의 값과 얼마나 다르면서도 여전히 포함될 수 있는지를 설정합니다. floating_threshold 는 픽셀이 이미 포함된 각 이웃과 얼마나 다를 수 있는지를 설정합니다. 두 임계값은 함께 작동합니다. 넉넉한 floating_threshold 는 채우기가 이미지 전체의 그라데이션을 따라가게 하고, 빡빡한 seed_threshold 는 그 그라데이션을 따라가더라도 시드 값에서 너무 멀리 벗어나지 않게 합니다.

몇 가지 플래그가 결과를 더 다듬습니다:

  • invert=True 는 일치하는 픽셀 자체가 아니라 일치하지 않는 모든 픽셀, 즉 일치 영역의 보집합을 칠합니다.

  • clear_background=True 는 채우기 영역 밖의 모든 픽셀을 0으로 만듭니다. 채워진 영역만을 마스크로 추출하는 데 유용합니다.

  • mask 키워드는 평소의 의미를 갖습니다. 마스크에서 꺼진 픽셀은 채우기가 도달했을 법한지 여부와 관계없이 그대로 남습니다.

플러드 필은 두 가지 패턴에서 가장 유용합니다. 첫째는 어떤 영역 검출기가 찾아낸 것을 시각화하는 것으로, 검출된 영역을 뚜렷한 색상으로 채워 프레임의 나머지와 대비되게 합니다. 둘째는 영역 자체를 추출하는 것으로, clear_background=True 를 영역 내부의 알려진 시드와 결합하고 그 결과 이미지를 후속 작업을 위한 마스크로 읽습니다.

5.8.2. 검출 결과 그리기

이미지 처리 알고리즘은 종종 위치와 추가 구조를 모두 담은 결과 객체를 반환합니다. 방향을 가진 키포인트, 경계 상자와 구별되는 중심점을 가진 얼굴 검출, 네 개의 모서리 점을 가진 AprilTag 등입니다. 이러한 것들을 단순한 경계 상자가 아니라 구조를 포착하는 글리프로 잘 그리는 것은 충분히 반복되는 패턴이어서, 모듈은 이를 위한 두 가지 헬퍼를 노출합니다.

draw_keypoints() 는 특징 추출기가 반환한 키포인트 디스크립터 또는 (x, y, rotation) 삼중쌍의 일반 목록을 받아 각 점에 작은 글리프를 그립니다. 글리프는 위치와 방향을 모두 담습니다. 점 주위의 원에 회전을 나타내는 중심에서 뻗어 나온 선이 더해집니다. 그 단일 호출 시각화는 키포인트 추출기가 응용 프로그램이 기대하는 방향을 반환하고 있는지 검증하는 가장 쉬운 방법입니다.

draw_detection() 은 여섯 요소 튜플 (rx, ry, rw, rh, cx, cy) (경계 사각형에 별도로 보고된 중심점을 더한 것)을 받아 둘을 한 번에 그립니다. 경계 상자 주위의 사각형, 중심점의 십자, 그리고 선택적으로 사각형 모서리의 텍스트 레이블입니다. 이 형식은 신경망 검출이나 템플릿 추적기가 일반적으로 보고하는 것과 일치하며, 여기서 중심점은 경계 상자의 중심이 줄 수 있는 것보다 더 정밀한 위치입니다.

두 글리프 메서드 모두 이 절 앞부분의 기하학적 프리미티브 위에 놓인 편의 계층입니다. 응용 프로그램은 draw_rectangle(), draw_circle(), draw_cross(), draw_string() 를 직접 호출하여 언제든 동일한 시각화를 재현할 수 있습니다. 글리프 메서드는 반복적으로 등장하는 패턴에 대한 부기 작업을 덜어줄 뿐입니다.

알려진 기하 구조를 위한 기하학적 프리미티브, 오버레이를 위한 이미지 합성, 이미지에서 도출된 영역을 위한 플러드 필, 그리고 표준 시각화 패턴을 위한 검출 글리프까지 갖추면 그리기 툴킷은 완성됩니다. 알고리즘 출력을 가시화하기 위해 응용 프로그램이 필요로 하는 모든 것은 그것을 거기에 두는 메서드를 표면에 가지고 있습니다.