OpenCV-仿射变换、图片旋转

图片仿射变换、图片旋转。

图片仿射变换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import cv2
import numpy as np

img = cv2.imread('../messi5.jpg', 1)
cv2.imshow('src', img)

img_info = img.shape
height = img_info[0]
width = img_info[1]

# 3 点确定一个平面
# 仿射变换就是将 原图像 上的三个点映射到 目标图片 新的位置上
mat_src = np.float32([[0, 0], [0, height - 1], [width - 1, 0]])
mat_dst = np.float32([[50, 50], [30, height - 20], [width - 30, 10]])

# 得到仿射变换矩阵
# 参数:原图像三个点的位置,这三个点的新的位置
mat_affine = cv2.getAffineTransform(mat_src, mat_dst)
dst = cv2.warpAffine(img, mat_affine, (width, height))

cv2.imshow('dst', dst)
cv2.waitKey(0)

仿射变换效果

图片旋转:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2

img = cv2.imread('../WindowsLogo.jpg', 1)
cv2.imshow('src', img)

imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 旋转矩阵
# getRotationMatrix2D 得到一个旋转矩阵
# 参数:旋转中心点、旋转角度、缩放系数
matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 0.5)

dst = cv2.warpAffine(img, matRotate, (height, width))

cv2.imshow('dst', dst)
cv2.waitKey(0)

图片旋转效果

获取图片旋转矩阵为什么要有缩放?

因为不缩放后图片就超出去了,缩放就是为了看清图片全貌。

缩放系数==1表示不缩放


文章作者: ahoj
文章链接: https://ahoj.cc/2019/07/OpenCV-仿射变换、图片旋转/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ahoj 的小本本