3장. 디지털 영상과 색공간 변환
정리
- 픽셀은
img[y, x]로 읽고 바꾸며, 슬라이싱으로 영역을 한꺼번에 칠합니다. 원본을 지키려면copy()한 복사본에 칠합니다. - 해상도는 칸 수입니다. 메모리 크기는 가로 × 세로 × 채널 × 한 칸 바이트이고, 바구니 그림(320×240 컬러)은 230,400바이트입니다.
- 계산할 때는
astype(np.float32) / 255로 0.0~1.0 으로 바꾸고, 되돌릴 때는np.clip으로 자른 뒤astype(np.uint8)로 담습니다. float32 는 메모리가 4배입니다. - 빛은 더할수록 밝아집니다. OpenCV 는 BGR, Matplotlib 은 RGB 이므로
cv2.COLOR_BGR2RGB나[..., ::-1]로 순서를 바꿉니다. - 흑백 밝기는 0.299×R + 0.587×G + 0.114×B 입니다. 사과 칸 [34, 37, 206] 은 87.189 로, 반올림한 87 이
cvtColor결과와 같습니다. - OpenCV 의 HSV 는 H 0~179(360도의 절반), S·V 0~255 입니다. 그늘과 빛 반사에도 H 는 크게 바뀌지 않아 색으로 고르기에 좋습니다.
cv2.inRange로 범위 안의 칸을 255 로 적은 마스크를 만들고, 빨강은 H 의 양 끝 두 구간을cv2.bitwise_or로 합칩니다. 바구니 그림에서 빨강은 7.09%, 보라 4.57%, 초록 3.77%, 노랑 2.58% 를 차지했습니다.