数字图像处理(入门篇)十三 仿射变换

目录

1 仿射变换

(1)代码

(2)结果图

        基本的图像变换包括:平移、旋转、缩放、翻转和错切。而仿射变换和透视变换就是对这些基本变换进行组合实现的。

        仿射变换(Affine Transformation)是指在向量空间中进行一次线性变换(乘以一个矩阵)和一次平移(加上一个向量),变换到另一个向量空间的过程。即对图像进行线性变换 + 平移

        仿射变换保持了二维图像的“平直性”和“平行性”。即仿射变换后直线和平行线仍然保持是直线和平行线。

1 仿射变换

变换公式如下:

 数字图像处理(入门篇)十三 仿射变换_第1张图片

         从上述公式可知,变换矩阵有6个参数,因此要确定3个像素点变换前后的对应坐标才能够求出仿射变换矩阵。

(1)代码

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

(2)结果图

数字图像处理(入门篇)十三 仿射变换_第2张图片

 

你可能感兴趣的:(数字图像处理,opencv,计算机视觉,python)