20장. 교육 콘텐츠 설계와 종합 실습
좋은 실습 예제의 조건
요리 수업 첫날에 "한정식 열두 가지 만들기"를 시키는 강사는 없습니다. 첫날은 계란말이 하나만 합니다. 다 만들면 접시에 담긴 모양이 바로 보이고, 강사가 미리 만들어 둔 완성품과 견줘 볼 수 있습니다. 재료는 1인분이라 10분이면 끝나고, 집에 가서 아침 반찬으로 바로 만들어 먹을 수 있습니다. 좋은 OpenCV 실습 예제도 이 다섯 가지를 갖춥니다.
그림의 네 상자가 좋은 예제의 조건이고, 아래 띠에 다섯째 조건인 "실제 일과 이어진다"를 적었습니다. 여기서 계란말이 하나가 "한 가지만", 접시의 모양이 "눈에 보인다", 완성품과 견주기가 "정답이 있다", 1인분 10분이 "작고 빠르다", 아침 반찬이 "실제 일과 이어진다"입니다. 비유가 맞지 않는 곳도 있습니다. 요리는 맛을 보는 사람마다 평가가 다르지만, 영상처리 실습은 정답과 숫자로 견줄 수 있어 평가가 훨씬 분명합니다.
다섯 조건과 이 교안의 예
| 조건 | 뜻 | 이 교안에서 그렇게 한 곳 |
|---|---|---|
| 한 가지만 | 한 실습에서 새 기술은 하나만 다룬다 | 9장에서는 침식, 팽창, 열기, 닫기를 실습마다 하나씩 다뤘다 |
| 눈에 보인다 | 처리 전후를 그림으로, 효과를 숫자로 보인다 | 6장의 비교 격자와 PSNR |
| 정답이 있다 | 맞았는지 스스로 잴 수 있다 | 8장의 정답 마스크, 11장의 정답 경계, 17장의 mistakes.csv |
| 작고 빠르다 | 그림은 작게(320×240 이하), 몇 초 안에 끝난다 | 이 교안의 그림은 한 장에 30KB 이하다 |
| 실제 일과 이어진다 | 현장에서 볼 법한 소재를 쓴다 | 영수증(8장), 컨베이어 부품(12장), 주차장(15장) |
짧은 예시
실습 계획 하나를 사전에 적고, 다섯 조건을 하나씩 따져 봅니다.
# 내가 만들 실습 하나를 사전에 적는다
plan = {
"제목": "Median 필터로 소금·후추 잡티 지우기",
"새 기술": ["cv2.medianBlur"], # 새로 배우는 함수 목록
"전후 그림": True, # 처리 전후를 나란히 보이는가
"정답": "잡티 넣기 전의 원본", # 견줄 정답이 있는가
"그림 크기": (320, 240),
"현장 소재": "부품 사진",
}
# 다섯 조건을 True/False 로 따진다
checks = {
"한 가지만": len(plan["새 기술"]) == 1,
"눈에 보인다": plan["전후 그림"],
"정답이 있다": bool(plan["정답"]),
"작고 빠르다": plan["그림 크기"][0] <= 320 and plan["그림 크기"][1] <= 240,
"실제 일과 이어진다": bool(plan["현장 소재"]),
}
for name, ok in checks.items():
print(f"{name:10} {'통과' if ok else '다시 보기'}")
print("통과한 조건:", sum(checks.values()), "/ 5") # 결과: 5 / 5주의할 점
- "작고 빠르다"를 지키려고 그림을 너무 작게 줄이면 효과가 안 보입니다. 320×240 정도면 노이즈와 경계가 눈에 잘 띕니다.
- 한 실습에 새 기술을 둘 넣으면, 결과가 이상할 때 어느 쪽 탓인지 수강생이 가리지 못합니다.