20장. 교육 콘텐츠 설계와 종합 실습
시각 자료 만들기
신문의 날씨 면은 글로 "내일은 서울 맑음, 부산 비"라고 길게 쓰지 않고, 지도 위에 해와 우산 그림을 올립니다. 한눈에 보이기 때문입니다. 수업 슬라이드도 같습니다. 필터를 걸기 전과 뒤를 말로 설명하기보다 두 그림을 나란히 놓고, 숫자 하나를 제목에 적는 편이 빠르게 전해집니다.
그림의 세 상자가 수업 슬라이드에 가장 자주 쓰는 그림입니다. 여기서 날씨 지도의 해와 우산이 전후 비교 격자의 그림이고, 지도 옆의 기온 숫자가 제목에 적은 PSNR 같은 숫자입니다. 이 교안의 장마다 맨 앞의 "큰 그림"이 흐름도이고, ## 정리 의 인포그래픽이 한 장 요약입니다.
그림마다 지킬 것
| 그림 | 언제 쓰나 | 지킬 것 |
|---|---|---|
| 전후 비교 격자 | 처리의 효과를 보일 때 | 같은 크기, 같은 차례(원본이 맨 왼쪽), 제목에 이름과 숫자 하나 |
| 흐름도 | 처리 순서를 보일 때 | 상자는 다섯 개 안팎, 상자 안의 말은 짧게, 화살표는 한 방향 |
| 한 장 요약 | 수업 끝에 정리할 때 | 흐름 한 줄, 대표 그림 두세 장, 핵심 숫자 한두 개 |
| 결과 표 | 여러 방법을 견줄 때 | 소수 셋째 자리까지, 가장 좋은 값을 글로 짚기 |
짧은 예시
OpenCV 만으로 두 그림을 나란히 붙이고 그림마다 이름을 써 넣습니다. 슬라이드에 바로 붙일 수 있는 한 장이 됩니다.
import cv2
img = cv2.imread("fruit_stand.png")
blur = cv2.GaussianBlur(img, (9, 9), 0)
def label(im, text):
"""그림 위쪽에 검은 띠를 깔고 흰 글자로 이름을 쓴다."""
out = im.copy()
cv2.rectangle(out, (0, 0), (out.shape[1], 26), (0, 0, 0), -1) # -1: 속을 채운다
# putText(그림, 글자, 왼쪽 아래 자리, 글꼴, 크기, 색, 굵기). 한글은 깨지므로 영어로 쓴다
cv2.putText(out, text, (8, 19), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 1)
return out
pair = cv2.hconcat([label(img, "before"), label(blur, "Gaussian 9x9")]) # 가로로 붙이기
print("붙인 그림의 모양:", pair.shape) # 결과: (240, 640, 3)cv2.putText 는 한글을 그리지 못하고 물음표로 바꿉니다. 한글 제목이 필요하면 실습 4처럼 Matplotlib 으로 격자를 그립니다.
주의할 점
- 전후 그림의 크기가 다르면 작은 쪽이 늘어나 보여 효과를 잘못 읽습니다. 붙이기 전에 크기를 맞춥니다(2장).
- 한 그림에 말하고 싶은 것은 하나만 둡니다. 필터 넷과 노이즈 셋을 한 장에 넣으면 12칸이 되어 무엇을 봐야 할지 모릅니다.