▷ 오늘 학습 계획: OpenCV 강의(6~8)
binarization: 영상의 픽셀 값을 0 또는 1(255)로 만드는 연산
배경 vs 객체, 관심영역 vs 비관심영역
자동 임계값 결정: 오츠(Otsu)
입력 영상이 배경과 객체 두 개로 구성되어 있다고 가정(bimodal histogram)
두 픽셀 분포의 분산의 합이 최소가 되는 임계값 선택
효과적인 수식 전개와 재귀식을 이용하여 빠르게 임계값을 결정한다.
src: 입력 영상
thresh: 임계값
maxval: 결과 이진 영상에서 최대 픽셀 값(보통 255)type: 임계값에 의한 변환 함수 지정 또는 자동 임계값 설정 방법
cv2.THRESH_BINARY → 이진화
cv2.THRESH_BINARY_INV → 이진화 후 반전
cv2.THRESH_BINARY | cv2.THRESH_OTSU → 자동 이진화
레이블링: 영역 기반 모양 분석
레이블맵, 바운딩 박스, 픽셀 개수, 무게 중심 좌표 반환
외곽선 검출: 외곽선 기반 모양 분석
외곽선 점들의 좌표와 계층 구조를 반환
다양한 외곽선 처리 함수에서 활용 가능(면적 계산, 근사화 등)
객체의 외곽선 좌표를 모두 추출하는 작업, boundary tracking, contour traicing
바깥쪽 & 안쪽(홀) 외곽선 → 외곽선의 계층 구조도 표현 가능
외곽선 객체 하나의 표현 방법
numpy.ndarray
shape=(K, 1, 2)(K: 외곽선 좌표 개수)
dtype=numpy.int32
여러 객체의 전체 외곽선 표현 방법
객체 하나의 외곽선을 원소로 갖는 리스트
len(리스트) = 전체 외곽선 개수(N)
image: 입력 영상
mode: 외곽선 검출 모드
cv2.RETR_EXTERNAL → 바깥쪽 외곽선만 검출
cv2.RETR_LIST → 모든 외곽선 검출
cv2.RETR_CCOMP → 2-레벨 계층 구조로 검출
cv2.RETR_TREE → 전체 계층 구조로 검출method: 외곽선 근사화 방법(cv2.CHAIN_APPROX_NONE: 근사화X)
contours: 검출된 외곽선 좌표(numpy.ndarray로 구성된 리스트)
contours[i].shape = (K, 1, 2)
contours[i].dtype = numpy.int32hierarchy: 외곽선 계층 정보
offset: 좌표 값 이동(기본값: (0,0))
image: 입출력 영상
contours: cv2.findContours()로 구한 외곽선 좌표 정보
contourIdx: 외곽선 인덱스, 음수(-1)로 지정하면 모든 외곽선
thickness: 외곽선 두께, 0 미만이면 내부 채우기
lineType: LINE_4, LINE_8, LINE_AA
hierarchy: 외곽선 계층 정보
maxLevel: 그리기를 수행할 최대 외곽선 레벨
curve: 외곽선 좌표
closed: True면 폐곡선으로 간주
contour: 외곽선 좌표
oriented: True면 외곽선 진행 방향에 따라 부호 있는 면적 반환
curve: 입력 곡선 좌표
epsilon: 근사화 정밀도 조절. 입력 곡선과 근사화 곡선 간의 최대 거리
closed: True면 폐곡선으로 간주
approxCurve: 근사화된 곡선 좌표
영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업(영상의 크기 변환, 대칭 변환, 회전 변환 등)
src: 4개의 원본 좌표점
dst: 4개의 결과 좌표점
src: 입력 영상
M: 3×3 변환 행렬
dsize: 결과 영상의 크기. (0,0) 지정하면 src와 같은 크기
dst: 출력 영상
flags: 보간법(기본값 cv2.INTER_LINEAR)
borderMode: 가장자리 픽셀 확장 방식
borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값(기본값 0)
1990년대: 초기 신경망 기법
눈, 코, 입의 엣지 성분 검출 및 위치 관계 분석
살색 영역 검출
2000년대 초반: Viola-Jones 얼굴 검출기
영상을 이용한 머신 런이 기법 도입, 빠르고 정확하게 얼굴 영역 검출
유사 하르(Haar-like) 특징 사용
AdaBoost에 기반한 강한 분류 성능
cascade 방식으로 빠른 동작
기존 얼굴 검출 방법보다 약 15배 빠르게 동작
2010년대 중반 이후: 딥러닝 객체 검출 기법 응용
Viola-Jones 방법보다 정확하고 안정적인 얼굴 검출 가능
OpenCV에서 딥러닝 기법으로 학습된 모델을 사용하는 예제 파일 제공
https://github.com/opencv/opencv/tree/master/samples/dnn/face_detector
src: 입력 영상
dsize: 결과 영상 크기. (w, h). (0,0)이면 fx, fy 값으로 결정
dst: 출력 영상
fx, fy: x와 y방향 스케일 비율(scale factor).interpolation: 보간법 지정(기본값 cv2.INTER_LINEAR)
cv2.INTER_NEAREST → 최근방 이웃 보간법
cv2.INTER_LINEAR → 양선형 보간법(2×2 이웃 픽셀 참조)
cv2.INTER_CUBIC → 3차 회선 보간법(4×4 이웃 픽셀 참조)
cv2.INTER_LANCZOS4 → Lanczos 보간법(8×8 이웃 픽셀 참조)
cv2.INTER_AREA → 영상 축소 시 효과적
▷ 내일 학습 계획: GPT 강의(1~3)
[이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.]