OpenCV 비전 실무20장 · 교육 콘텐츠 설계와 종합 실습6 / 21← 이전목차다음 →MetaContents

20장. 교육 콘텐츠 설계와 종합 실습

난이도 조절하기

헬스장의 운동 기구에는 무게를 바꾸는 핀이 있습니다. 처음 온 사람은 10kg 에, 익숙한 사람은 40kg 에 핀을 꽂습니다. 기구는 하나인데 핀만 옮기면 누구에게나 알맞은 운동이 됩니다. 연습 그림을 만드는 함수에도 이런 핀, 곧 손잡이를 달아 둡니다.

개수, 크기, 노이즈, 조명의 네 손잡이를 나란히 놓은 비교 그림

그림의 네 상자가 영상처리 실습의 난이도를 바꾸는 손잡이입니다. 여기서 운동 기구가 그림 생성 함수이고, 무게 핀이 함수의 매개변수입니다. 손잡이를 한꺼번에 여러 개 돌리면 무엇 때문에 어려워졌는지 알기 어려우므로, 판을 나눌 때는 손잡이마다 얼마나 돌렸는지를 표로 남깁니다.

쉬움, 보통, 어려움 세 난이도의 연습 그림과 정답 마스크를 2행 3열로 놓은 그림

위 줄이 실습 2와 같은 함수로 만든 세 판의 연습 그림이고, 아래 줄이 함께 만든 정답 마스크입니다. 오른쪽으로 갈수록 동전이 많고 작아지며, 지글지글한 노이즈가 세지고, 왼쪽이 어둡고 오른쪽이 밝은 조명 차이가 커집니다. 정답 마스크는 난이도와 상관없이 깨끗합니다.

세 판의 손잡이

손잡이쉬움보통어려움어려워지는 까닭
개수(count)4710많을수록 붙거나 놓치기 쉽다
반지름(radius)22~2814~229~16작을수록 잡티와 헷갈린다
노이즈(noise, 표준편차)01530셀수록 이진화 뒤 잡티가 는다
조명 차(light)060120클수록 기준값 하나로 나누기 어렵다(8장)

짧은 예시

손잡이를 사전 하나에 모아 두면 판을 더하거나 고치기 쉽습니다.

Python
import pandas as pd

LEVELS = {
    "쉬움":   {"count": 4,  "radius": (22, 28), "noise": 0,  "light": 0},
    "보통":   {"count": 7,  "radius": (14, 22), "noise": 15, "light": 60},
    "어려움": {"count": 10, "radius": (9, 16),  "noise": 30, "light": 120},
}
# orient="index": 사전의 바깥 키(쉬움·보통·어려움)를 표의 줄로 쓴다
print(pd.DataFrame.from_dict(LEVELS, orient="index"))

# 조명 차 60 이면 왼쪽 끝은 -30, 오른쪽 끝은 +30 만큼 밝기가 바뀐다
light = 60
print("왼쪽 끝:", -light / 2, "/ 오른쪽 끝:", light / 2)

주의할 점

  • 난이도를 올린 뒤에는 "모범 풀이"를 세 판에 모두 돌려 점수가 정말 내려가는지 확인합니다(실습 2의 4단계). 손잡이를 돌렸는데 점수가 그대로면 난이도가 바뀐 것이 아닙니다.
  • 어려움 판은 그 장에서 배운 방법만으로는 풀리지 않을 수 있습니다. 그럴 때는 "다음 장에서 배울 방법"을 힌트로 적거나, 어려움 판을 도전 과제로 돌립니다.
← 이전 절20장 · 실습 데이터를 코드로 만들기다음 절 →20장 · 정답표와 자동 채점