OpenCV 이미지 회전

Ammar Ali 2023년6월21일
  1. OpenCV의 rotate() 함수를 사용하여 Python에서 이미지 회전
  2. OpenCV의 warpAffine() 함수를 사용하여 Python에서 이미지 회전
OpenCV 이미지 회전

이 튜토리얼에서는 Python에서 OpenCV의 rotate()warpAffine() 함수를 사용하여 이미지를 회전하는 방법에 대해 설명합니다.

OpenCV의 rotate() 함수를 사용하여 Python에서 이미지 회전

OpenCV의 rotate() 함수를 사용하여 이미지를 회전할 수 있습니다. rotate() 함수의 첫 번째 인수는 회전하려는 이미지입니다. 두 번째 인수는 이미지가 회전할 정도와 방향을 지정합니다.

rotate() 함수를 사용하여 이미지를 회전하는 방법은 세 가지뿐입니다. 두 번째 인수를 cv2.ROTATE_90_CLOKWISE로 설정하여 이미지를 시계 방향으로 90도 회전할 수 있습니다.

cv2.ROTATE_180을 사용하여 이미지를 180도 회전하거나 뒤집을 수 있습니다. cv2.ROTATE_90_COUNTERCLOCKWISE를 사용하여 이미지를 시계 반대 방향으로 90도 또는 시계 방향으로 270도 회전할 수 있습니다. rotate() 함수를 사용하여 이미지를 회전하는 유일한 세 각도입니다.

예를 들어 imread() 함수를 사용하여 이미지를 읽고 시계 방향으로 90도 회전한 다음 imshow() 함수를 사용하여 원본 이미지와 함께 표시해 보겠습니다. 아래 코드를 참조하십시오.

import cv2
import numpy as np

image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)

cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()

출력:

이미지 회전

rotate()를 사용하면 3각도로만 이미지를 회전할 수 있지만 모든 각도에서 이미지를 회전하려면 아래에서 설명하는 warpAffine() 함수를 사용할 수 있습니다.

OpenCV의 warpAffine() 함수를 사용하여 Python에서 이미지 회전

OpenCV의 warpAffine() 함수를 사용하여 어떤 각도로든 이미지를 회전할 수 있습니다. warpAffine() 함수는 행렬을 다른 행렬로 변환합니다.

이미지를 회전하려면 OpenCV의 getRotationMatrix2D() 함수를 사용하여 회전 행렬을 찾아야 합니다.

getRotationMatrix2D()의 첫 번째 인수는 회전하려는 이미지의 중심입니다. 두 번째 인수는 회전 각도이고 세 번째 인수는 이미지의 크기입니다.

배율이 1보다 작으면 이미지가 원본 이미지보다 크기가 작아지거나 축소됩니다. 배율이 양수이면 이미지가 배율 조정되거나 확대됩니다. 스케일이 1이면 이미지의 스케일이 조정되지 않습니다.

warpAffine() 함수의 첫 번째 인수는 회전하려는 이미지입니다. 두 번째 인수는 회전 행렬이고 세 번째 인수는 출력 이미지의 크기입니다.

예를 들어 위의 이미지를 중심을 기준으로 45도 회전해 보겠습니다. 아래 코드를 참조하십시오.

import cv2
import numpy as np

image = cv2.imread("cat.jpg")

(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1

M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))

cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

출력:

warpAffine으로 이미지 회전

위의 코드에서는 shape 메서드를 사용하여 주어진 이미지의 길이와 너비를 찾은 다음 길이와 너비의 절반을 취하여 이미지의 중심을 계산했습니다. 원하는 결과를 얻기 위해 중심, 각도 및 스케일 값을 변경할 수 있습니다.

borderMode 인수를 사용하여 출력 이미지의 테두리 모드를 설정할 수도 있습니다. 기본적으로 테두리 모드는 cv2.BORDER_CONSTANT로 설정되어 있으며, 보시다시피 출력 이미지의 모서리에 테두리가 없습니다.

경계 모드를 cv2.BORDER_TRANSPARENT로 설정할 수 있습니다. 출력 이미지는 원본 이미지와 테두리가 같거나 모서리가 그대로 유지됩니다.

경계 모드를 cv2.BORDER_REPLICATE로 설정할 수 있습니다. 출력 이미지 테두리 또는 모서리는 근처 픽셀을 사용하여 그려집니다.

테두리 모드에 대한 자세한 내용을 보려면 이 링크를 클릭하십시오.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

관련 문장 - Python OpenCV

관련 문장 - OpenCV Image