warpAffine
[OpenCV with Python] 영상 기하학적 변환 : 어파인 변환
어파인 변환 - Affine Transform 어파인 변환은 영상의 이동, 전단, 확대, 회전을 조합할 때 직사각형이 평행사변형으로 변화한다. 어파인 변환을 표현하는 방법은 2 X 3 행렬의 실수형에 회전, 크기, 이동 정보가 들어가 있다. 어파인 변환은 미지수가 6개이기 때문에 6개의 식이 필요하며 점 3개가 어디로 이동했는지 알면 행렬로 표시할 수 있다. 점 세개의 이동정보를 알면 어파인 행렬로 표시가 가능하며, 세개의 이동정보로 마지막 점의 위치를 유추할 수 있다. ✔︎ 어파인 변환 행렬 - cv2.getAffineTransform retval = cv2.getAffineTransform(src, dst) src: 3개의 원본 좌표점. numpy.ndarray. shape=(3, 2) e.g) np..
[OpenCV with Python] 영상 기하학적 변환 : 영상의 회전 - cv2.getRotationMatrix2D
회전 변환 Rotation transformation 영상을 특정 각도만큼 회전시키는 변환이다. (반시계 방향으로 회전) 반시계 방향으로 세타만큼 회전시킬 때 sin, cos 함수로 표현할 수 있다. affine 행렬을 생성하고 affwrap 함수를 이용하여 간단히 회전 할 수 있다. 회전 변환을 위한 Affine 행렬을 생성하는 방법은 두 가지가 있다. 1. 영상의 좌측 상단 기준 회전 np.array로 Affine 행렬을 생성하고, 생성한 Affine 행렬을 warpAffine 함수의 입력 인자로 입력해준다. src = cv2.imread('tekapo.bmp') if src is None: print('Image load failed!') sys.exit() rad = 20 * math.pi / 1..
[OpenCV with Python] 영상 기하학적 변환 : 전단 변환 - cv2.warpAffine
영상의 전단 변환 - Shear transformation 영상의 전단 변환은 층 밀림 변환이라고도 한다. 이동을 하는데 모든 픽셀들이 동일하게 이동하는 것이 아니라 어떤 픽셀은 조금 이동하고 어떤 픽셀은 많이 이동하여 한쪽을 찌그러뜨리는 효과를 낸다. 전단 변환도 이동 변환과 마찬가지로 어파인 행렬을 만들어야 한다. 이동 변환에서는 단위 행렬을 어파인 행렬로 생성했지만, 전단 변환은 m 상수도 필요하다. 전단 변환을 한 만큼 영상이 밀려나가게 되어 영상이 짤리게 된다. 이를 해결하기 위해 밀린 만큼 출력 영상의 크기를 키워주면 된다. ✔︎ cv2.warpAffine 함수 dst = cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None,..
[OpenCV with Python] 영상 기하학적 변환 : 이동 변환 - cv2.warpAffine
영상의 기하학적 변환(geometric transformation)이란? 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업 Image registration, removal of geometric distortion, etc. ❓ 기하학적 변환이 필요한 이유 입력 영상 크기가 제한되어 있어 영상 크기를 축소해야 하는 경우 객체가 영상의 정중앙에 있어야 하는 경우 회전이 되어 있는 영상을 똑바로 보정 이 외에도 여러가지 상황에서 영상의 기하학적 변환이 필요하다. 1. 영상의 이동 변환 - Translation transformation 이동 변환은 shift라는 용어도 많이 쓴다. 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환이다. x, y 방향으로 어느 정도..