OpenCV 비전 실무1장 · AI 비전과 OpenCV 개발환경7 / 22← 이전목차다음 →MetaContents

1장. AI 비전과 OpenCV 개발환경

전처리가 필요한 까닭

김치찌개를 끓일 때 장 봐 온 재료를 그대로 냄비에 넣지 않습니다. 흙을 씻고, 시든 잎을 떼고, 비슷한 크기로 썹니다. 손질을 하면 같은 불로도 맛이 고르게 납니다. AI 모델도 같습니다. 어떤 사진은 어둡고, 어떤 사진은 지글지글한 점(노이즈)이 끼어 있고, 크기도 제각각입니다. 이런 사진을 고르게 다듬는 일이 전처리입니다.

어둡고 노이즈가 낀 사진, 밝기를 올린 사진, 노이즈까지 줄인 사진을 차례로 놓은 그림

왼쪽은 어둡고 점이 낀 사진, 가운데는 밝기를 올린 사진, 오른쪽은 노이즈까지 줄인 사진입니다. 같은 과일 진열대인데도 오른쪽으로 갈수록 과일의 테두리가 또렷합니다. 여기서 장 봐 온 재료가 찍은 그대로의 사진이고, 씻고 써는 일이 전처리이고, 냄비가 AI 모델입니다.

흔한 문제와 손질법

사진의 문제생기는 까닭손질법(전처리)배우는 곳
너무 어둡거나 밝다조명, 날씨, 카메라 설정밝기·대비 조정, 히스토그램 평활화5장
지글지글한 점이 많다어두운 곳에서 찍음, 센서의 잡음평균·Gaussian·Median·Bilateral 필터6장, 7장
크기와 방향이 제각각카메라마다 해상도가 다름크기 바꾸기, 회전, 원근 보정14장
깨진 파일이 섞여 있다내려받다 끊김, 저장 오류읽기 실패 거르기16장, 이 장의 프로젝트
사진 수가 적다모으기 힘든 상황뒤집기, 돌리기 같은 데이터 증강16장

숫자를 바꾸면 사진이 바뀐다

전처리는 결국 숫자 표의 숫자를 계산으로 바꾸는 일입니다. 밝기를 올리는 것은 모든 칸에 같은 수를 더하는 것입니다.

Python
import numpy as np
import cv2

# 밝기가 50, 120, 250 인 칸 세 개
dark = np.array([[50, 120, 250]], dtype=np.uint8)

# NumPy 로 그냥 더하면 255 를 넘는 칸이 0 부터 다시 돈다(250 + 60 = 310 → 310 - 256 = 54)
print(dark + 60)            # 결과: [[110 180  54]]

# cv2.add 는 255 를 넘으면 255 에서 멈춘다(포화 연산)
print(cv2.add(dark, 60))    # 결과: [[110 180 255]]

uint8 은 0~255 만 담으므로, 256 이 되면 시계 바늘이 12 를 지나 1 로 돌아가듯 0 으로 돌아갑니다. 그래서 가장 밝던 칸이 갑자기 어두워집니다. cv2.add 는 255 에서 멈추게 계산합니다. 이것을 포화(saturation, 가득 차서 더 들어가지 않음) 연산이라고 합니다.

주의할 점

  • 전처리를 지나치게 하면 오히려 정보를 지웁니다. 노이즈를 너무 세게 지우면 흠집까지 함께 사라집니다.
  • 학습할 때 한 전처리는 실제로 쓸 때도 똑같이 해야 합니다. 학습은 밝게 다듬은 사진으로 하고 실제로는 어두운 사진을 넣으면 모델이 헷갈립니다.
← 이전 절1장 · AI 비전이 쓰이는 곳다음 절 →1장 · AI 비전 작업의 흐름