함수 설명
이미지를 회전 시킬때 사용하는 함수입니다.
이미지의 중심 pixel을 기준으로 반 시계 방향으로 회전시켜줍니다.
이미지의 크기를 유지하지 않고 회전시키는 방법과 유지시킨 채 회전하는 방법이 있습니다.
이미지의 크기를 유지하면서 회전하게 되면 잘려나가는 부분이 발생하게 됩니다.
코드 설명
python에서 이미지를 회전시키는 방법은 다양합니다.
그 가운데 몇가지 방법에 대해 소개하도록 하겠습니다.
1. OpenCV 라이브러리
* 크기 유지 O
matrix = cv2.getRotationMatrix2D((width/2, height/2), angle, 1)
output= cv2.warpAffine(src, matrix, (width, height))
1) src : 바꾸고 싶은 source 이미지
2) width, height : source 이미지의 가로, 세로 길이
3) angle : 회전할 각도
* 크기 유지 X
output = cv2.rotate(src, rotateCode)
1) src : 바꾸고 싶은 source 이미지
2) rotateCode : 회전할 각도
cv2.ROTATE_90_CLOCKWISE | 시계방향으로 90도 |
cv2.ROTATE_180 | 180도 |
cv2.ROTATE_90_COUNTERCLOCKWISE | 시계반대방향으로 90도 |
2. scikit-image 라이브러리
from skimage.transform import rotate
output = rotate(src, angle, resize=True)
1) src : 바꾸고 싶은 source 이미지
2) angle : 회전할 각도
3) resize : 크기 유지 유무
False이면 크기유지 O, True이면 크기유지 X
3. Pilow 라이브러리
* 크기 유지 O
output = src.rotate(angle)
1) src : 바꾸고 싶은 source 이미지
2) angle : 회전할 각도
* 크기 유지 X
output = src.transpose(rotateCode)
1) src : 바꾸고 싶은 source 이미지
2) rotateCode: 회전할 각도
Image.ROTATE_90 | 시계반대방향으로 90도 |
Image.ROTATE_180 | 180도 |
Image.ROTATE_270 | 시계반대방향으로 270도 |
예제
다양한 함수를 통해 이미지 회전시킵니다.
import cv2
from skimage import io
from skimage.transform import rotate
from PIL import Image
# Image Load
image = io.imread('rose.jpg')
angle = 90
# OpenCV
height, width = image.shape[0:2]
matrix = cv2.getRotationMatrix2D((width/2, height/2), angle, 1)
cv_output1 = cv2.warpAffine(image, matrix, (width, height))
cv_output2 = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
# scikit-image
sci_output1 = rotate(image, angle, resize=False)
sci_output2 = rotate(image, angle, resize=True)
# Pillow
colorImage = Image.open("cat.jpg")
pillow_output1 = colorImage.rotate(angle)
pillow_output2 = colorImage.transpose(Image.ROTATE_90)
크기를 유지한채 회전하면 위의 이미지처럼 짤리거나 여백이 생기는걸 확인 할 수 있습니다. 반면에 크기를 유지하지 않은채 회전하면 원본 이미지의 정보는 유지되지만 크기가 바뀌는 것을 확인할 수 있습니다.
'Image Processing (Python)' 카테고리의 다른 글
Histogram Equalization (히스토그램 균일화) (0) | 2021.12.06 |
---|---|
Edge Detection (윤곽선 검출) (0) | 2021.12.01 |
Denoising (non-local) (0) | 2021.11.23 |
Color Space Change (색공간 변경) (0) | 2021.11.22 |
Gamma Correction (감마 보정) (1) | 2021.11.19 |
댓글