『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】26. 图像的旋转(以原点为中心)
图像以原点 (0, 0) 为中心、顺时针旋转角度 θ 进行旋转操作,可以由以下公式描述:
[x~y~1]=MAR[xy1],MAR=[cosθ−sinθ0sinθcosθ0001]\begin{bmatrix} \tilde{x}\\ \tilde{y}\\ 1 \end{bmatrix} = M_{AR} \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} ,\hspace{1em} M_{AR} = \begin{bmatrix} cos \theta &-sin \theta &0\\ sin \theta &cos \theta &0\\ 0 &0 &1 \end{bmatrix} ⎣⎡x~y~1⎦⎤=MAR⎣⎡xy1⎦⎤,MAR=⎣⎡cosθsinθ0−sinθcosθ0001⎦⎤
按上式构造旋转变换矩阵 MAR,由函数 cv2.warpAffine 可以计算变换后的绕原点旋转图像。
注意事项:
- 求出旋转变换矩阵 MAR,由函数 cv2.warpAffine 可以实现任意角度和任意中心的旋转效果。
- 以图像中心作为旋转中心时,可以用 img.shape 获得图像的宽度和高度值,除以 2 就是图像中心点坐标。
- 旋转角度为 90,180,270 度时,可以用 cv2.rotate(src, rotateCode) 函数实现,该方法实际上是通过矩阵转置实现的,因此速度很快。
基本例程:1.35 图像的旋转(以原点为中心旋转)
# 1.35 图像旋转 (以原点 (0,0) 为中心旋转)img = cv2.imread("../images/imgLena.tif") # 读取彩色图像(BGR)rows, cols, ch = img.shapetheta = np.pi / 8.0 # 顺时针旋转角度cosTheta = np.cos(theta)sinTheta = np.sin(theta)MAT = np.float32([[cosTheta, -sinTheta, 0], [sinTheta, cosTheta, 0]]) # 构造旋转变换矩阵# dst = cv2.warpAffine(img, MAT, (cols, rows)) # 默认为黑色填充dst = cv2.warpAffine(img, MAT, (cols, rows), borderValue=(255,255,255)) # 设置白色填充plt.figure(figsize=(9,6))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Origin")plt.subplot(122), plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)), plt.title("Rotation")plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
【第3章:图像的几何变换】
26. 图像的旋转(以原点为中心)
27. 图像的旋转(以任意点为中心)
28. 图像的旋转(直角旋转)