1. 픽셀(Pixel)
- 정의: 디지털 이미지의 가장 기본적인 단위. ‘그림 요소(Picture Element)’의 줄임말
- 구성: 각 픽셀은 하나의 색상 값을 가지며, 이미지는 이러한 픽셀들의 2차원 배열로 구성
- 좌표 시스템 (OpenCV 기준)
- 좌상단이 원점(0,0)
- 오른쪽으로 갈수록 x값 증가
- 아래로 갈수록 y값 증가
2. 이미지 해상도
- 정의
- 가로×세로 픽셀 수로 표현
- 예: 640×480 해상도는 가로 640픽셀, 세로 480픽셀을 의미
- 중요성
- 해상도가 높을수록 세밀한 정보를 담을 수 있음
- 해상도가 높아질 수록 처리 시간과 메모리 사용량 증가
3. 색상 공간(Color Space)
- 그레이스케일(Grayscale)
- 구조
- 각 픽셀이 0(검은색)부터 255(흰색)까지의 단일 값을 가짐
- 표현
- 8비트(1바이트)로 표현됨
- 256단계의 명암을 표현할 수 있음
- 용도: 윤곽선 검출, 형태 분석 등 색상 정보가 중요하지 않은 경우에 사용됨
- RGB 색상 모델
- 구조
- 각 픽셀이 Red(빨강), Green(초록), Blue(파랑) 세 가지 색상 채널의 값을 가짐
- 표현
- 일반적으로 채널당 8비트를 사용하여 각 채널이 0~255 사이의 값을 가짐
- 총 24비트(3바이트)로 약 1,680만 색상을 표현할 수 있음
- 순서: OpenCV에서는 기본적으로 BGR 순서로 채널 저장(일반적인 RGB와 반대)
- 용도: 자연색 이미지 처리, 객체 인식 등 색상 정보가 중요한 작업에 사용됨
- HSV/HSL 색상 모델
- 구성 요소:
- Hue(색상): 0~179(OpenCV에서)의 값으로 색상의 종류를 나타냄
- Saturation(채도): 0~255의 값으로 색상의 순수도를 나타냄
- Value/Lightness(명도): 0~255의 값으로 색상의 밝기를 나타냄
- 장점: 인간의 색상 인식 방식과 유사하여 색상 기반 분할에 유용
- 용도: 특정 색상 영역 추출, 조명 변화에 강인한 처리가 필요할 때 사용
4. 이미지 데이터 구조
- NumPy 배열 형태
- OpenCV에서의 표현
- 이미지는 NumPy 배열(ndarray)로 표현됨
- 차원:
- 그레이스케일: 2차원 배열 (높이 × 너비)
- 컬러 이미지: 3차원 배열 (높이 × 너비 × 채널 수)
- 접근 방식
image[y, x]로 그레이스케일 픽셀에 접근image[y, x, channel]로 컬러 이미지의 특정 채널 값에 접근
- 데이터 타입
- 일반적 타입: uint8(8비트 부호 없는 정수, 0~255)
- 고정밀 처리용: float32, float64 등 (0.0~1.0 범위로 정규화하여 사용)
- 특수 목적: int16, int32 등 (연산 과정에서 오버플로우 방지)
5. 이미지 파일 형식과 메모리 구조
- 파일 형식
- 압축 방식:
- 무손실 압축: PNG, BMP, TIFF 등
- 손실 압축: JPEG 등
- 채널 지원:
- 알파 채널(투명도) 지원: PNG, TIFF
- 알파 채널 미지원: JPEG
- 메모리 내 구조
- 연속성(Continuity): OpenCV의 이미지는 기본적으로 메모리에 연속적으로 저장됨
- 행 우선 저장: 픽셀 데이터는 행(row) 단위로 메모리에 연속적으로 저장됨
- 패딩(Padding): 메모리 접근 최적화를 위해 각 행의 끝에 추가 바이트가 삽입될 수 있음
6. ROI(Region of Interest)
- 정의: 이미지에서 관심 있는 특정 영역을 의미
- 표현 방식
- OpenCV에서는 슬라이싱을 통해 쉽게 ROI를 추출할 수 있음
roi = image[y:y+h, x:x+w] # (x,y)부터 너비 w, 높이 h 영역
7. 이미지 처리를 위한 중요 개념
- 채널 분리와 병합
- 분리:
b, g, r = cv2.split(image)로 각 채널 분리 - 병합:
merged = cv2.merge([b, g, r])로 채널을 다시 병합
- 이미지 연산
- 픽셀 단위 연산: 덧셈, 뺄셈, 곱셈 등의 연산이 픽셀 단위로 수행됨
- 마스킹(Masking)
- 정의: 특정 영역만 선택적으로 처리하거나 제외하기 위해 사용하는 이진(binary) 이미지
- 활용
- 이미지에서 특정 객체만 추출하거나, 특정 배경을 제거할 때 사용
- 마스크는 주로 그레이스케일 이미지 형태로, 관심 영역은 255(흰색), 제외 영역은 0(검은색)으로 표현됨
# 예: 원본 이미지에서 마스크 영역만 추출
masked_image = cv2.bitwise_and(original_image, original_image, mask=binary_mask)
- 이미지 크기 조정 (Resizing)
- 정의: 이미지의 가로 및 세로 픽셀 수를 변경하는 작업
- 메서드
cv2.resize() 함수 사용- 인터폴레이션(보간법) 방법을 지정할 수 있음
cv2.INTER_LINEAR: 선형 보간 (기본값, 속도와 품질 적당)cv2.INTER_AREA: 영역 보간 (이미지 축소에 적합)cv2.INTER_CUBIC: 큐빅 보간 (이미지 확대에 적합, 고품질)
- 용도
- 딥러닝 모델 입력 크기 통일, 처리 속도 향상, 메모리 절약 등에 사용
- 이미지 회전 및 변환
- 회전(Rotation)
cv2.rotate() 함수나 회전 매트릭스 생성cv2.warpAffine() 함수를 통해 이미지를 특정 각도로 회전
- 투시 변환(Perspective Transform)
- 이미지의 원근감을 변경하여 평면상의 객체를 다른 시점에서 보는 것처럼 변환
cv2.getPerspectiveTransform()과 cv2.warpPerspective() 사용- 자율주행에서는 조감도(Bird’s Eye View)를 얻거나 차선 인식 등에 활용됨
- 어파인 변환(Affine Transform)
- 평행 이동, 회전, 크기 조절, 기울임 등 이미지의 형태를 유지하면서 변환
cv2.getAffineTransform()과 cv2.warpAffine() 사용
- 색상 공간 변환
- 정의: 이미지의 색상 모델을 변경하는 작업
- 함수:
cv2.cvtColor() 함수 사용- 변환 코드를 지정함
- RGB ↔ BGR:
cv2.COLOR_RGB2BGR, cv2.COLOR_BGR2RGB - BGR ↔ 그레이스케일:
cv2.COLOR_BGR2GRAY - BGR ↔ HSV:
cv2.COLOR_BGR2HSV
- 활용
- 그레이스케일 변환: 처리 속도 향상 및 색상 정보가 불필요한 경우에 유용
- HSV 변환: 특정 색상 범위 추출(예: 초록색 신호등, 노란색 차선)에 유용