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()
출력:
위의 코드에서는 shape 메서드를 사용하여 주어진 이미지의 길이와 너비를 찾은 다음 길이와 너비의 절반을 취하여 이미지의 중심을 계산했습니다. 원하는 결과를 얻기 위해 중심, 각도 및 스케일 값을 변경할 수 있습니다.
borderMode
인수를 사용하여 출력 이미지의 테두리 모드를 설정할 수도 있습니다. 기본적으로 테두리 모드는 cv2.BORDER_CONSTANT
로 설정되어 있으며, 보시다시피 출력 이미지의 모서리에 테두리가 없습니다.
경계 모드를 cv2.BORDER_TRANSPARENT
로 설정할 수 있습니다. 출력 이미지는 원본 이미지와 테두리가 같거나 모서리가 그대로 유지됩니다.
경계 모드를 cv2.BORDER_REPLICATE
로 설정할 수 있습니다. 출력 이미지 테두리 또는 모서리는 근처 픽셀을 사용하여 그려집니다.
테두리 모드에 대한 자세한 내용을 보려면 이 링크를 클릭하십시오.