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

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

이미지는 숫자 표

모눈종이에 칸마다 색연필로 색을 칠해 그림을 그린다고 해 봅시다. 칸이 아주 많고 작으면 멀리서 볼 때 매끈한 사진처럼 보입니다. 디지털 이미지가 바로 이 모눈종이입니다. 다만 색연필 대신 칸마다 "얼마나 밝은지"를 숫자로 적어 둡니다.

사과 모양의 작은 흑백 이미지를 8×8 칸으로 크게 키우고 칸마다 밝기 숫자를 적은 그림

그림은 사과 모양 흑백 이미지를 8×8 칸으로 크게 키운 것입니다. 칸 하나가 픽셀이고, 칸 안의 숫자가 그 칸의 밝기입니다. 0 에 가까울수록 검고, 255 에 가까울수록 흽니다. 여기서 모눈종이가 이미지이고, 칸이 픽셀이고, 칸에 칠한 진하기가 숫자입니다.

왜 0부터 255까지일까

밝기 숫자는 보통 8비트에 담습니다. 비트(bit, binary digit, 2진수 한 자리)는 0 아니면 1 만 적을 수 있는 칸입니다. 칸이 하나면 2가지, 둘이면 2×2=4가지, 여덟 개면 2를 여덟 번 곱한 256가지를 적을 수 있습니다.

비트 수계산적을 수 있는 가짓수숫자 범위
1220~1 (검정, 흰색만)
22×240~3
82×2×2×2×2×2×2×22560~255

0부터 세기 시작하므로 256가지는 0~255 입니다. 사람 눈은 256단계 정도면 회색이 매끈하게 이어진다고 느낍니다.

흑백과 컬러

흑백 이미지는 칸마다 숫자가 하나입니다. 컬러 이미지는 칸마다 숫자가 세 개입니다. 빛의 세 가지 기본색인 파랑, 초록, 빨강을 얼마나 섞었는지를 하나씩 적습니다.

견줄 것흑백 이미지컬러 이미지
칸마다 숫자1개 (밝기)3개 (파랑, 초록, 빨강)
배열 모양(세로, 가로)(세로, 가로, 3)
320×240 크기의 숫자 개수320×240 = 76,800개76,800×3 = 230,400개
Python
import numpy as np

# 컬러 픽셀 하나. OpenCV 는 [파랑, 초록, 빨강] 순서(BGR)로 적는다
red = np.array([0, 0, 255], dtype=np.uint8)      # 빨강만 가득
yellow = np.array([0, 255, 255], dtype=np.uint8) # 초록 + 빨강 = 노랑

# 세로 2칸, 가로 3칸짜리 컬러 이미지: 모양은 (2, 3, 3)
tiny = np.zeros((2, 3, 3), dtype=np.uint8)
tiny[0, 0] = red
tiny[1, 2] = yellow
print(tiny.shape)    # 결과: (2, 3, 3)
print(tiny[1, 2])    # 결과: [  0 255 255]

np.zeros((2, 3, 3), dtype=np.uint8) 은 모든 칸이 0(검정)인 배열을 만듭니다. zeros 는 "0 들"이라는 뜻입니다. 빈 도화지를 먼저 깔고 칸을 칠하는 셈입니다.

주의할 점

  • 빛의 색 섞기는 물감과 다릅니다. 빨강과 초록 빛을 섞으면 노랑이 되고, 세 빛을 모두 가득 섞으면 흰색이 됩니다.
  • OpenCV 는 색을 BGR(파랑, 초록, 빨강) 순서로 적습니다. 3장에서 RGB 와의 차이를 자세히 봅니다.
← 이전 절1장 · 컴퓨터비전이란다음 절 →1장 · 컴퓨터비전이 하는 일