14장. 영상 기하학 변환과 Affine, Perspective
정리
- 기하학 변환은 칸의 값이 아니라 자리를 옮깁니다. 그림 함수와 변환 함수는 (x, y), 배열은 [y, x] 순서입니다.
cv2.resize의dsize는 (가로, 세로), 결과shape는 (세로, 가로) 입니다. 비율을 지키려면 한 변만 정하고 다른 변은 같은 배율로 계산합니다(320×240 → 200×150).- 보간법은 새 칸을 채우는 방법입니다. 100 과 200 사이를 LINEAR 는 125, 175 로 채웁니다. 동심원을 4분의 1로 줄이면 NEAREST 는 표준편차 107.0 의 물결무늬, AREA 는 17.1 의 고른 회색이 되었습니다. 줄일 때는 AREA, 키울 때는 LINEAR·CUBIC, 마스크는 NEAREST 입니다.
- 정해진 크기에 맞추는 방법은 늘리기(모양을 잃음), 가운데 자르기(가장자리를 잃음), 레터박스(여백이 생김) 세 가지입니다. 320×180 사진을 128×128 레터박스로 맞추면 여백 비율이 0.438 이었습니다.
cv2.flip(1 좌우, 0 위아래, -1 둘 다)과cv2.rotate는 값을 바꾸지 않고 자리만 바꿉니다. 90도 돌리면 가로와 세로가 바뀝니다.- 아핀 변환은 2×3 표로 점을 옮깁니다. 줄마다 곱해서 더하면 (40, 40) 이
[[1, 0, 60], [0, 1, 20]]으로 (100, 60) 이 됩니다. 회전 표는cv2.getRotationMatrix2D가, 세 점의 표는cv2.getAffineTransform이 계산합니다. 30도 돌린 320×240 그림은 397×368 로 키워야 모서리가 잘리지 않습니다. - 원근 변환은 점 네 쌍으로 3×3 표를 만들어 비스듬한 면을 폅니다. 점은 왼쪽 위부터 시계 방향으로 맞춥니다. 문서 세 장을 편 결과의 MAE 는 7.19~9.63 으로, 크기만 맞춘 77 대보다 훨씬 작았습니다.