Ch 05. 기하학적 변환 - 02. 영상의 확대와 축소
Ch 05. 기하학적 변환 - 03. 이미지 피라미드
Ch 05. 기하학적 변환 - 04. 영상의 회전
오늘은 오랜만에 카페에 와서 공부했습니다.
집 근처에 카페가 리모델링하고 더 좋아졌더라고요.
이번 강의에서는 영상의 크기 변환과 회전 변환에 대해서 배워보았습니다^^
영상의 크기 변환(Scale transformation)
영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환
openCV에서 이미 영상의 크기를 변환해주는 함수를 제공해줌
cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) -> dst
dsize: 결과 영상 크기를 튜플 형태로 입력 (w, h), (0,0) 일 경우 fx, fy 값을 이용하여 결정.
fx, fy: x와 y 방향 스케일 비율 (dsize 값이 0일때 유효)
interpolation: 보간법 지정. 기본값은 cv2.INTER_LINEAR
그외
cv2.INTER_CUBIC - (4 x 4 이웃 픽셀 참조)
cv2.INTER_LANCZOS4 - (8x8 이웃 픽셀 참조)
cv2.INTER_AREA - 영상 축소 시 효과적
계산 시간 & 퀄리티
cv2.INTER_LINEAR < cv2.INTER_CUBIC < cv2.INTER_LANCZOS4
영상의 축소 시 고려할 사항
영상 축소 시 디테일이 사라지는 경우가 발생 (e.g. 한 픽셀로 구성된 선분)
입력 영상을 부드럽게 필터링한 후 축소, 다단계 축소
opencv의 cv2.resize() 함수에서는 cv2.INTER_AREA 플래그를 사용
영상의 대칭 변환 함수
cv2.flip(src, flipcode, dst=None) -> dst
flipCode: 대칭 방향 지정
- 양수 (좌우 대칭)
- 0 (상하 대칭)
- 음수 (좌우 & 상하 대칭)
이미지 피라미드
하나의 영상에 대해 다양한 해상도의 영상 세트를 구성하는 것
보통 가우시안 블러링 & 다운 샘플링 형태로 축소하여 구성
다운 샘플링: 큰 영상을 점점 작게 하여 작은 영상을 만드는 것
업 샘플링: 작은 영상을 점점 크게 하여 큰 영상을 만드는 것
openCV 피라미드 함수
- 다운 샘플링
cv2.pyrDown(src, dst=None, dstsize=None, borderType=None) -> dst
dstsize: 출력 영상 크기.
따로 지정하지 않으면 입력 영상의 가로, 세로 크기의 1/2로 설정.
참고)
먼저 5x5 크기의 가우시안 필터를 적용
이후 짝수 행과 열을 제거하여 작은 크기의 영상을 생성
- 업 샘플링
cv2.pyrUp(src, dst=None, dstsize=None, borderType=None) -> dst
영상의 회전
영상을 특정 각도만큼 회전시키는 변환 (반시계 방향)
warpper 함수를 사용하여 변환
먼저 affine 변환 행렬을 만듬
rad = 20*math.pi / 180
aff = np.array([[math.cos(rad), math.sin(rad), 0],
[-math.sin(rad), math.cos(rad), 0]], dtype=np.float32)
dst = cv2.warpAffine(src, aff, (0,0))
결과: 반시계 방향으로 20도 돌아간 영상 반환
하지만 위의 함수를 사용하여 회전 변환을 할시 영상의 중점을 기준으로 회전을 하지 않고
영상의 (0,0)을 기준으로 회전이 됨
특정 좌표를 기준으로 회전하기
cv2.getRotationMatrix2D(center, angle, scale) -> retval
center: 좌표 튜플로 입력
angle: 회전 각도 입력, 시계방향으로 회전할 시 음수로 입력
scale: 크기 변환 스케일
영상의 중앙 기준 회전 동장 과정
1. 사용자가 지정한 기준 좌표를 (0,0)으로 이동시켜 영상을 이동
2. 이동시킨 영상을 지정한 각도로 회전
3. 다시 원래의 자리로 이동
4. 출력 영상의 크기로 자름
강의 링크: bit.ly/2NTHHz7
'난 이 분야 전문가야! > OpenCV' 카테고리의 다른 글
OpenCV :: Mat Class 사용법 정리 (생성 및 기본연산, C++) (0) | 2022.11.28 |
---|---|
Silicon Mac(M1)에서 OpenCV C++ 개발환경 설정 정리 (Xcode) (0) | 2022.07.29 |
컴퓨터비전인강 4주차 :: 영상에서 특정 색상 추출 (0) | 2021.03.12 |
컴퓨터비전인강 3주차:: 영상에서의 히스토그램 (0) | 2021.03.07 |
컴퓨터비전인강 3주차 :: 영상에서의 산술과 다양한 색 공간 (0) | 2021.03.06 |