opencv使用cv.GetAffineTransform()实现图像仿射

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。仿射变换需要一个M矩阵,但是由于仿射变换比较复杂,一般直接找很难找到这个矩阵,opencv提供了根据变换前后三个点的对应关系来自动求解M的函数,这个函数就是:

M=cv2.GetAffineTransform(src, dst)
  1. src:原始图像中的三个点的坐标
  2. dst:变换后的这三个点对应的坐标
  3. M:根据三个对应点求出的仿射变换矩阵
    然后再使用函数cv2.warpAffine()利用得到的M对原始图像进行变换即可
    在这里插入图片描述
from matplotlib import pyplot as plt
import cv2
import numpy as np

img = cv2.imread('aier.jpg')
rows,cols = img.shape[:2]
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,20],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
#第三个参数:变换后的图像大小
res = cv2.warpAffine(img,M,(rows,cols))
plt.subplot(121)
plt.imshow(img[:,:,::-1])

plt.subplot(122)
plt.imshow(res[:,:,::-1])

plt.show()

在这里插入图片描述

发布了27 篇原创文章 · 获赞 20 · 访问量 1561

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/104448700