目录
1 仿射变换
(1)代码
(2)结果图
基本的图像变换包括:平移、旋转、缩放、翻转和错切。而仿射变换和透视变换就是对这些基本变换进行组合实现的。
仿射变换(Affine Transformation)是指在向量空间中进行一次线性变换(乘以一个矩阵)和一次平移(加上一个向量),变换到另一个向量空间的过程。即对图像进行线性变换 + 平移。
仿射变换保持了二维图像的“平直性”和“平行性”。即仿射变换后直线和平行线仍然保持是直线和平行线。
变换公式如下:
从上述公式可知,变换矩阵有6个参数,因此要确定3个像素点变换前后的对应坐标才能够求出仿射变换矩阵。
import cv2
import matplotlib.pyplot as plt
import numpy as np
def dealImageResult(img_path):
img = cv2.imread(img_path)
RGBImage = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
height, width = RGBImage.shape[:2]
matSrc = np.float32([[0, 0], [0, height-10], [width-50, 0]])
matDst = np.float32([[0, 0], [50, height-50], [width-30, 50]])
matAffine = cv2.getAffineTransform(matSrc, matDst)
result = cv2.warpAffine(RGBImage, matAffine, (width, height))
fig = plt.figure(figsize=(8, 8))
titles = ["img", "result"]
images = [RGBImage, result]
for i in range(2):
plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':
dealImageResult("test.png")
pass