OpenCV
[OpenCV with Python] 영상 기하학적 변환 : 리매핑(remapping) - cv2.remap
리매핑(remapping) 리매핑을 잘 활용하면 입력 영상을 직선이 아닌 곡선으로 표현할 수 있어 좀 더 자유도 있는 변환을 할 수 있다. 리매핑은 영상의 특성 위치 픽셀을 다른 위치에 재배치하는 일반적인 프로세스이다. 리매핑은 기하학적 변환을 맵핑한다. 출력 영상의 x,y 좌표에서 픽셀 값을 입력 영상에서 참조할건데 어느 위치를 참조할 것인지 나타내는 map x와 map y 함수를 정의한다. 출력 영상의 좌표를 입력 영상의 어느 좌표를 참조해서 갖고올 것이냐를 설정해서 출력 영상의 모든 픽셀 값을 셋팅해 출력 영상을 만들어내는 방법이다. 따라서 영상을 꿀렁꿀렁하게 하거나 휘게하는 것도 리매핑으로 할 수 있다. 어파인 변환, 투시 변환을 포함한 다양한 변환을 리매핑으로 표현할 수 있다. ✔︎ cv2.re..
[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] 영상 기하학적 변환 : 이미지 피라미드
이미지 피라미드 - Image pyramid 이미지 피라미드는 하나의 영상에 대해 다양한 해상도의 영상 세트를 구성한 것이다. 영상의 크기를 가로, 세로 반을 줄이거나 반을 키워서 다양한 크기의 영상을 생성한다. 보통가우시안 블러링 & 다운 샘플링 형태로 축소하여 구성한다. 이미지 피라미드를 통해 작은 크기 영상을 만드는 이유는 다음과 같다. 입력 영상에서 어떠한 객체를 찾고 싶을 때 영상에 존재하는 객체의 크기가 다양하다. 고양이 얼굴 크기를 지정해두고 영상에서 고양이 얼굴을 찾고 싶을 때, 지정한 고양이 얼굴 크기보다 작거나 크면 못 찾을 가능성이 있으므로, 다양한 이미지 크기를 만든다. 영상의 다운샘플링은 가우시안 블러링을 적용하고 축소하여 출력 영상에 자연스러운 형태나 부드러운 형태를 갖게 한다...