图像的旋转
下面是一张小猪佩奇的照片,请进行顺时针90度,逆时针90度,180度旋转
方法一:使用了 NumPy 库的 np.rot90() 函数来实现图像的旋转
np.rot90(img, k=-1) 表示将输入的图像 img 顺时针旋转 90 度,
np.rot90(img, k=1) 表示将图像逆时针旋转 90 度。
import cv2
import numpy as np
#导入原图
img=cv2.imread('小猪佩奇.png')
# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
# 旋转 90 度,k=1 表示逆时针旋转 90 度
rotated_image2 = np.rot90(img, k=1)
cv2.imshow('yuantu',img)
cv2.imshow('rotated_image1',rotated_image1)
cv2.imshow('rotated_image2',rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
方法二:OpenCV 库的 cv2.rotate()
函数来实现图像的旋转
cv2.rotate(image, flag)
参数说明:
image:要旋转的图像。
flag:指定旋转的方式,有以下几种取值:
cv2.ROTATE_90_CLOCKWISE:顺时针旋转 90 度
cv2.ROTATE_90_COUNTERCLOCKWISE:逆时针旋转 90 度
cv2.ROTATE_180:旋转 180 度
然后通过 cv2.imshow()
函数分别展示顺时针旋转 90 度后的图像(名为 shun90
)、逆时针旋转 90 度后的图像(名为 ni90
)和旋转 180 度后的图像(名为 180
)。
import cv2
#导入原图
img=cv2.imread('小猪佩奇.png')
rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) #顺时针90度
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) #逆时针90度
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180) #旋转180度
cv2.imshow('shun90',rotated_image)
cv2.imshow('ni90',rotated_image1)
cv2.imshow('180',rotated_image2)
cv2.waitKey(0)
这两种方法只能进行90度的整数倍的度数旋转,那要是旋转30度,60度怎么办呢
我们可以先写入下面这个函数
def rotate_image(image, angle, direction='counterclockwise'):
(h, w) = image.shape[:2] # 获取图像的高度 h 和宽度 w
center = (w // 2, h // 2) # 计算图像的中心坐标
if direction == 'counterclockwise': # 如果旋转方向是逆时针
M = cv2.getRotationMatrix2D(center, angle, 1.0) # 获取逆时针旋转的变换矩阵
elif direction == 'clockwise': # 如果旋转方向是顺时针
M = cv2.getRotationMatrix2D(center, -angle, 1.0) # 获取顺时针旋转的变换矩阵
rotated = cv2.warpAffine(image, M, (w, h)) # 应用变换矩阵对图像进行旋转
return rotated # 返回旋转后的图像
直接调用这个函数就可以旋转任意度数了
import cv2
#导入原图
img=cv2.imread('小猪佩奇.png')
shun30 = rotate_image(img, 30, 'clockwise') # 顺时针旋转 30 度
ni60= rotate_image(img, 60, 'counterclockwise') # 逆时针旋转 60 度
cv2.imshow('original', img)
cv2.imshow('shun30', shun30)
cv2.imshow('ni60', ni60)
cv2.waitKey(0)