영상의 전단 변환 - Shear transformation
영상의 전단 변환은 층 밀림 변환이라고도 한다.
이동을 하는데 모든 픽셀들이 동일하게 이동하는 것이 아니라 어떤 픽셀은 조금 이동하고 어떤 픽셀은 많이 이동하여 한쪽을 찌그러뜨리는 효과를 낸다.
전단 변환도 이동 변환과 마찬가지로 어파인 행렬을 만들어야 한다.
이동 변환에서는 단위 행렬을 어파인 행렬로 생성했지만, 전단 변환은 m 상수도 필요하다.
전단 변환을 한 만큼 영상이 밀려나가게 되어 영상이 짤리게 된다.
이를 해결하기 위해 밀린 만큼 출력 영상의 크기를 키워주면 된다.
✔︎ cv2.warpAffine 함수
dst = cv2.warpAffine(src, M, dsize, dst=None, flags=None,
borderMode=None, borderValue=None)
- src: 입력 영상
- M: 2x3 어파인 변환 행렬. 실수형.
- dsize: 결과 영상 크기. (w, h) 튜플. (0, 0)이면 src와 같은 크기로 설정.
- dst: 출력 영상
- flags: 보간법. 기본값은 cv2.INTER_LINEAR.
- borderMode: 가장자리 픽셀 확장 방식. 기본값은 cv2.BORDER_CONSTANT.
- borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값. 기본값은 0(검정색).
cv2.INTER_LINEAR은 양선형 보간법을 의미
borderValue는 이동 변환을 했을 때 생기는 빈공간을 어떤 색깔로 채울 것인지를 의미한다. 기본값은 0(검정색)
💬 실습
import sys
import numpy as np
import cv2
src = cv2.imread('tekapo.bmp')
if src is None:
print('Image load failed!')
sys.exit()
aff = np.array([[1, 0.5, 0],
[0, 1, 0]], dtype=np.float32)
h, w = src.shape[:2]
dst = cv2.warpAffine(src, aff, (w + int(h * 0.5), h))
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
⬇︎
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 영상 기하학적 변환 : 영상의 대칭 변환 - cv2.flip (0) | 2022.02.02 |
---|---|
[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize (0) | 2022.02.02 |
[OpenCV with Python] 영상 기하학적 변환 : 이동 변환 - cv2.warpAffine (0) | 2022.02.01 |
[OpenCV with Python] Filtering : Noise 제거 - 양방향 필터 Bilateral Filter (0) | 2022.02.01 |
[OpenCV with Python] Filtering : Noise 제거 - Median Filter (0) | 2022.02.01 |