赞
踩
仅供个人学习用,如果对各位朋友有参考价值,给个赞或者收藏吧 ^_^
parameters | center:旋转中心坐标,是一个元组参数(col, row) angle:旋转角度,旋转方向,负号为逆时针,正号为顺时针 scale:旋转后图像相比原来的缩放比例,1为等比例缩放 |
returns | 返回一个2*3的旋转(变换)矩阵,因为变换矩阵第三行形式固定,所以忽略。 |
returns:返回下面的2*3行列式,注:α=cosθ,β=sinθ
还是不太懂的话参考:cv2.getRotationMatrix2D的旋转矩阵的正确形式-CSDN博客
parameters | src:原始图像。 |
returns | 返回旋转后的图像 |
- import cv2 as cv
- import numpy as np
- import matplotlib.pyplot as plt
-
- img = cv.imread('E:/Desktop/jianli/lenna.png')
- img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
- (h, w) = img.shape[:2]
- print('原图像的高和宽', h, w)
- (cX, cY) = (w // 2, h // 2)
- M = cv.getRotationMatrix2D((cX, cY), -45, 1.0)
- print('旋转矩阵:\n', M)
- rotate0 = cv.warpAffine(src=img, M=M, dsize=(h, w))
- cos = np.abs(M[0, 0])
- sin = np.abs(M[0, 1])
- nH = int((h*cos) + (w*sin))
- nW = int((h*sin) + (w*cos))
- print('新图像的高和宽', nH, nW)
- rotate1 = cv.warpAffine(img, M, (nW, nH))
- # 调整旋转矩阵的中心以平移到中心显示全图
- M[0, 2] += (nW/2) - cX
- M[1, 2] += (nH/2) - cY
- rotate2 = cv.warpAffine(img, M, (nW, nH))
- print('中心点平移后的旋转矩阵:\n', M)
- # 显示图像
- plt.subplot(1, 3, 1), plt.imshow(rotate0, 'gray'), plt.title('rotate0')
- plt.subplot(1, 3, 2), plt.imshow(rotate1, 'gray'), plt.title('rotate1')
- plt.subplot(1, 3, 3), plt.imshow(rotate2, 'gray'), plt.title('rotate2')
- plt.show()

计算经过仿射变换或旋转后新图像的宽度和高度,尤其是在旋转图像时保持图像的完整性而不裁剪任何部分,需要一些几何计算。
看了以下图就能知道为啥子这么计算啦
nH = int((h*cos) + (w*sin))
nW = int((h*sin) + (w*cos))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。