어파인 변환과 투시 변환
어파인 변환
-
정의: 영상의 평행이동, 확대 및 축소, 회전 등의 조합으로 만들수 있는 기하학적 변환으로 셀의 위치를 일정 규칙에 따라 옮김으로한다.
-
시각화
- 행렬
- 좌표
- 행렬 구하기
cv2.getAffineTransform(src, dst) -> retval
-
src: 3개의 원본 좌표점. numpy.ndarrary, shape(3,2)
- ex:) np.array([[x1,y1], [x2,y2], [x3,y3]], np.float32)
-
dst: 3개의 결과 좌표점으로 numpy.ndarray.shape=(3,2)
-
retval: 2 * 3 투시 변환 행렬
- 변환 함수
cv2.warpAffine(src, M, dsize, dst=None, flags=None,
borderMode=None, borderValue=None) -> dst
-
src: 입력 영상
-
M: 2 * 3 어파인 변환 행렬로 실수형이다
-
dsize: 결과 영상 크기이고 (w,h)튜플로 (0,0)이먄 src와 같은 크기로 설정
-
dst: 출력 영상
-
flags: 보간법. 기본값은 cv2.INTER_LINEAR
-
borderMode: 가장자리 픽셀 확장 방식으로 기본 값은 cv2.BORDER_CONSTANT
-
borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값으로 기본 값은 0이다.
투시 변환
-
정의: 3차원 좌표계(카메라 좌표계)를 2차원 좌표계로 변환하는 것을 말한다.
-
예시
- 좌표
- 행렬
cv2.getPerspectiveTransform(src, dst, solveMethod=None) -> retval
-
src: 4개의 원본 좌표점으로 numpy.ndarray.shape = (4,2)
- ex) np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]], np.float32)
-
dst: 4개의 결과 좌표점으로 numpy.ndarray.shape=(4,2)
-
retval: 3 * 3 투시 변환 행렬
- 변환 함수
cv2.warpPerspective(src, M, dsize, dst=None, flags=None,
borderMode=None, borderValue=None) -> dst
-
src: 입력 영상
-
M: 3 * 3 투시 변환 행렬로 실수형이다.
-
dsize: 결과영상 크기로 (w,h)튜플이다. (0,0)이면 src와 같은 크기로 설정
-
dst: 출력 영상
-
flags: 보간법. 기본값은 cv2.INTER_LINEAR
-
borderMode: 가장자리 픽셀 확장 방식으로 기본값은 cv2.BORDER_CONSTANT
-
borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값으로 기본 값은 0이다.
예제
src = cv2.imread('namecard.jpg')
w, h = 720, 400
srcQuad = np.array([[325, 307], [760, 369], [718, 611], [231, 515]],
np.float32)
dstQuad = np.array([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], np.float32)
pers = cv2.getPerspectiveTransform(srcQuad, dstQuad)
dst = cv2.warpPerspective(src, pers, (w, h))
Author And Source
이 문제에 관하여(어파인 변환과 투시 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qsdcfd/어파인-변환과-투시-변환저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)