I. 영상 처리 인공지능

V4 보충 블러와 에지

사진을 살짝 흐리게 만든 뒤 밝기가 크게 바뀌는 곳(에지)을 찾아 테두리만 남겨요. 시작하기의 첫 실습(웹캠 에지 검출)과 이어지는 보충 차시예요.

성취기준
성취기준 코드 확인 중
소요 시간
50분
준비물
웹캠(없으면 샘플 이미지)
난이도
보통

아직 틀만 있는 차시예요

이 차시는 차시 페이지의 틀을 보여 주는 견본이에요. 영상처리 실습실을 만드는 단계(Phase 2)에서 그림과 설명을 채워 완성해요.

학습목표

  • 사진을 먼저 흐리게(블러) 하는 까닭을 설명할 수 있어요.
  • 에지가 밝기가 크게 바뀌는 곳이라는 것을 알고, 코드로 찾을 수 있어요.
  • 값을 바꿔 가며 결과가 어떻게 달라지는지 비교할 수 있어요.

왜 배울까

사람은 사진 속 물체를 테두리로 먼저 알아봐요. 컴퓨터도 에지를 찾아 물체의 모양을 알아내요. 자율주행 자동차가 도로의 차선을 찾을 때도 이 방법을 써요.

그림 자리

원래 사진, 흐리게 한 사진, 에지만 남긴 사진을 나란히 보여 주는 그림이 들어갈 자리예요.

핵심 개념

블러: 흐리게 하기

블러는 픽셀 하나하나를 주변 픽셀과 섞어 사진을 흐리게 만드는 방법이에요. 흐리게 하면 작은 잡티(노이즈)가 줄어들어요.

에지: 밝기가 크게 바뀌는 곳

이웃한 픽셀끼리 밝기 차이가 큰 곳이 에지예요. 물체의 테두리가 보통 에지가 돼요.

코드의 cv2.Canny는 밝기 차이를 두 기준과 견줘요. 이렇게 나누는 기준값을 임계값이라고 해요. 밝기 차이가 위 기준(high)보다 크면 에지로 정하고, 아래 기준(low)보다 작으면 버리고, 그 사이면 확실한 에지와 이어져 있을 때만 남겨요.

따라하기

실습실이 생기면 이 예제를 웹캠이나 샘플 이미지로 바로 실행해요. 지금은 코드를 한 줄씩 읽어 보세요.

따라하기 예제흐리게 한 뒤 테두리 찾기examples/vision/u1/v4-blur-edge.py
# 보충 V4 틀 예제: 흐리게 한 뒤 테두리(에지) 찾기
# 영상처리 실습실(Phase 2)에서 웹캠이나 샘플 이미지로 실행해요.
# 줄 끝의 "# @slider 최소 최대 간격"은 실습실이 조절 막대로 바꿔 줘요(SPEC §6.1).
import cv2

# 흐리게 하는 정도: 홀수만 쓸 수 있어서 1부터 2씩 늘려요.
blur_size = 5  # @slider 1 31 2
# 테두리로 볼 밝기 차이의 아래 기준과 위 기준
low = 50  # @slider 0 255 1
high = 150  # @slider 0 255 1

cap = cv2.VideoCapture(0)  # 0번 카메라(웹캠)를 열어요.
while True:
    ok, frame = cap.read()  # 사진 한 장(프레임)을 읽어요.
    if not ok:  # 읽지 못하면 반복을 끝내요.
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 흑백으로 바꿔요.
    blurred = cv2.GaussianBlur(gray, (blur_size, blur_size), 0)  # 흐리게 해요.
    edges = cv2.Canny(blurred, low, high)  # 밝기가 크게 바뀌는 곳을 찾아요.
    cv2.imshow("edges", edges)  # 결과를 화면에 보여 줘요.
    if cv2.waitKey(1) & 0xFF == ord("q"):  # q 키를 누르면 끝내요.
        break

cap.release()  # 카메라를 닫아요.
cv2.destroyAllWindows()  # 창을 모두 닫아요.
실습실에서 열기(준비 중)

실습실은 아직 만들고 있어요. 지금은 코드를 한 줄씩 읽어 보고, 실습실이 생기면 이 자리에서 바로 실행해요.

왜 이런 결과가 나올까?

흑백으로 바꾸면 색 대신 밝기만 남아서 밝기 차이를 재기 쉬워요. 흐리게 한 다음 테두리를 찾으면 작은 잡티는 사라지고 물체의 테두리가 남아요.

확인해 보세요

  • 화면에 검은 바탕과 흰 테두리 선이 보여요.
  • 손을 움직이면 테두리 선도 따라 움직여요.

바꿔보기

바꿔 보기

  1. blur_size를 1과 21로 바꿔 보세요. 찾은 테두리가 많아지나요, 줄어드나요?
  2. lowhigh를 모두 낮춰 보세요(예: 20과 60). 새로 테두리로 잡히는 곳은 어디인가요?
  3. cv2.Canny(blurred, low, high)blurredgray로 바꿔, 흐리게 하지 않고 테두리를 찾아 보세요. 결과가 어떻게 달라지나요?

도전 과제

도전 과제: 테두리를 굵게 보이기

찾은 테두리 선이 가늘어서 잘 보이지 않아요. 선을 굵게 만들어 화면에 보여 주세요.

힌트 보기

cv2.dilate(edges, None)은 흰 부분을 한 겹씩 넓혀요. 그 결과를 cv2.imshow로 보여 주세요.

확인 퀴즈

세 문제로 확인해 보세요.

보기를 고르고 [답 확인하기]를 눌러요. 키보드로는 방향키로 보기를 고르고 Tab으로 단추에 가요.

  1. 문제 1. 에지(edge)는 사진에서 어떤 곳일까요?
    정답과 풀이 보기

    정답: ① 이웃한 픽셀끼리 밝기가 크게 바뀌는 곳

    에지는 물체의 테두리처럼 밝기가 갑자기 크게 바뀌는 곳이에요. 사진의 네 가장자리를 뜻하는 말이 아니에요.

  2. 문제 2. 에지를 찾기 전에 사진을 먼저 흐리게(블러) 하는 까닭은 무엇일까요?
    정답과 풀이 보기

    정답: ① 작은 잡티까지 테두리로 잘못 찾지 않게 하려고

    흐리게 하면 작은 잡티(노이즈)의 밝기 차이가 줄어요. 그래서 진짜 물체의 테두리가 더 잘 남아요.

  3. 문제 3. 코드에서 blur_size를 5에서 21로 키우면 결과는 어떻게 될까요?
    정답과 풀이 보기

    정답: ① 더 많이 흐려져서 찾는 테두리가 줄어요.

    흐리게 하는 범위가 넓어지면 밝기 변화가 부드러워져요. 그래서 약한 테두리는 사라지고 뚜렷한 테두리만 남아요.

교사용

교사용 안내

지도안 요약(틀)

  • 시작하기의 첫 실습(웹캠 에지 검출)과 같은 예제를 써요. 흐름과 시간 배분은 영상처리 실습실을 만든 뒤(Phase 2) 정해요.

평가 포인트

  • 블러를 먼저 하는 까닭을 잡티(노이즈)와 연결해 설명하는가?
  • blur_size, low, high를 바꾼 결과를 비교해 말할 수 있는가?

자주 막히는 곳

  • blur_size에 짝수를 넣으면 오류가 나요. 가우시안 블러의 크기는 홀수만 되기 때문이에요(조절 막대가 2씩 늘어나는 까닭).
  • 에지를 “사진의 네 가장자리”로 오해해요. 밝기 변화가 큰 곳이라는 뜻을 짚어 주세요.

원고와 자료

  • 교과서에 없는 보충 차시라 사이트가 새로 써요. 성취기준은 억지로 붙이지 않았어요. 과목 교육과정이 영상 처리 함수 사용법 교육이 수업의 중심이 되지 않도록 하라고 안내하기 때문이에요.