import cv2
image = cv2.imread('path_to_your_image.jpg')
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated_image = cv2.warpAffine(image, M, (w, h))
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这段代码的目的是对图像进行旋转操作。下面我们逐行解释这段代码的具体含义和作用:
代码解释
(h, w) = image.shape[:2]
-
image.shape
返回图像的形状,即图像的高度、宽度和通道数(如果是彩色图像,则有三个通道)。 -
shape[:2]
只获取前两个值,即图像的高度h
和宽度w
。
center = (w // 2, h // 2)
- 计算旋转中心点的位置。这里选择图像的中心作为旋转的轴心点。
-
w // 2
和h // 2
分别是图像宽度和高度的一半,即图像的中心点坐标。
M = cv2.getRotationMatrix2D(center, angle, scale)
- 使用
cv2.getRotationMatrix2D()
函数来计算旋转矩阵M
。 -
center
是旋转中心点。 -
angle
是旋转的角度,单位为度(正值表示逆时针旋转,负值表示顺时针旋转)。 -
scale
是缩放因子,1.0 表示保持原尺寸,其他值表示缩小或放大。
rotated_image = cv2.warpAffine(image, M, (w, h))
- 使用
cv2.warpAffine()
函数对图像进行仿射变换。 -
image
是输入图像。 -
M
是旋转矩阵。 -
(w, h)
是输出图像的尺寸,这里保持与原图像相同。
cv2.imshow('Rotated Image', rotated_image)
- 使用
cv2.imshow()
函数显示旋转后的图像。 -
'Rotated Image'
是窗口名称。 -
rotated_image
是旋转后的图像。
cv2.waitKey(0)
-
cv2.waitKey(0)
表示等待键盘输入,参数0
表示无限等待。 - 按下任意键后继续执行后续代码。
cv2.destroyAllWindows()
- 使用
cv2.destroyAllWindows()
函数关闭所有 OpenCV 窗口。
总结
这段代码的主要功能是:
- 获取图像的高度和宽度。
- 计算图像中心点。
- 生成一个旋转矩阵,用于指定旋转的中心点、角度和缩放因子。
- 使用仿射变换函数对图像进行旋转操作。
- 显示旋转后的图像,并等待用户按键关闭窗口。
通过这段代码,可以对图像进行旋转处理,同时保持图像中心为旋转轴心,并可选择是否缩放图像。