[python] NumPy를 사용하여 회전 변환을 행하는 방법을 알려주세요.

회전 변환은 이미지나 객체를 원점을 중심으로 일정한 각도만큼 회전시키는 작업입니다. NumPy는 행렬 연산을 위한 강력한 도구로, 회전 변환을 간단하게 구현할 수 있습니다. 이번 가이드에서는 NumPy를 사용하여 회전 변환을 수행하는 방법을 알려드리겠습니다.

회전 변환 행렬 생성

먼저, 회전 변환을 위한 2D 회전 행렬을 생성해야 합니다. 아래 식을 사용하여 회전 행렬을 생성할 수 있습니다.

R = [[cos(theta), -sin(theta)],
     [sin(theta), cos(theta)]]

여기서 theta는 회전할 각도입니다. 이제 NumPy를 사용하여 회전 행렬을 생성하는 예제 코드를 보여드리겠습니다.

import numpy as np

def rotation_matrix(theta):
    cos_theta = np.cos(theta)
    sin_theta = np.sin(theta)
    return np.array([[cos_theta, -sin_theta], [sin_theta, cos_theta]])

위 코드에서 rotation_matrix 함수는 각도 theta를 받아 회전 행렬을 반환합니다.

이미지 회전

이제 이미지를 회전시키는 방법을 알아보겠습니다. 이미지는 2D 배열로 표현될 수 있으므로, 회전 행렬을 사용하여 이미지를 회전시킬 수 있습니다. 아래 예제 코드는 이미지를 주어진 각도만큼 회전시키는 방법을 보여줍니다.

import numpy as np
from PIL import Image

def rotate_image(image_path, angle):
    image = Image.open(image_path)
    image_array = np.array(image)
    rotated_image = np.dot(image_array, rotation_matrix(angle))
    return Image.fromarray(rotated_image.astype(np.uint8))

위 코드에서 rotate_image 함수는 이미지 경로와 회전 각도를 받아 이미지를 회전시키고 회전된 이미지를 반환합니다. 회전된 이미지는 PIL 라이브러리의 Image 객체로 반환됩니다.

예제 실행

이제 rotate_image 함수를 사용하여 이미지를 회전시키는 예제를 실행해보겠습니다.

image_path = "path/to/your/image.jpg"
angle = 30  # 회전할 각도 (단위: 도)

rotated_image = rotate_image(image_path, angle)
rotated_image.show()

위 코드에서 image_path 변수에는 회전시킬 이미지 파일의 경로를 지정합니다. angle 변수에는 회전할 각도를 설정합니다. 이 예제에서는 30도로 설정하였습니다. 마지막으로 rotated_image.show()를 호출하여 회전된 이미지를 화면에 표시합니다.

이제 위의 예제 코드를 실행하여 이미지를 회전시켜보세요.