OpenCV 旋转图像
本教程将讨论在 Python 中使用 OpenCV 的 rotate()
和 warpAffine()
函数旋转图像。
在 Python 中使用 OpenCV 的 rotate()
函数旋转图像
我们可以使用 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()
,我们只能在三个角度上旋转图像,但如果我们想在每个角度上旋转图像,我们可以使用 warpAffine()
函数,如下所述。
在 Python 中使用 OpenCV 的 warpAffine()
函数旋转图像
我们可以使用 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
。将使用附近的像素绘制输出图像的边框或角。
单击此链接了解有关边框模式的更多详细信息。
相关文章 - Python OpenCV
- OpenCV sobel() 函数
- Python 中 OpenCV 的 GUI 特性
- 在 Python 中使用 OpenCV 创建二维码扫描器
- 在 Python 中使用 OpenCV 的 HSV 颜色空间
- OpenCV 中的模糊滤镜
- 使用 OpenCV 进行对象跟踪