opencv|opencv 几何变换之仿射变换

仿射变换可以用来平移图像: 进行仿射变换的图像与原图像相比,保持其平直性和平行性。
dst = cv2.warpAffine(src, m, dsize, flags, borderMode, bordervalue)
参数说明:

  1. src:原图
  2. dst:结果图像
  3. m:变换矩阵(2*3的矩阵)[[1, 0, dx],[0, 1, dy]]
  4. disze:窗口尺寸 (宽(列),高(行))
  5. flags:插值方式
  6. borderMode:边类型。
  7. bordervalue:边界值,默认0
# 平移 构建平移矩阵 import cv2 as cv import numpy as npimg = cv.imread("picture\lena.jpg") h, w = img.shape[:2]# 移动的距离 x = 50 y = 50# 构建矩阵 float32型 2*3的矩阵 m = np.float32([[1, 0, x], [0, 1, y]])# 仿射变换进行图像平移 原图像 平移矩阵 dsize尺寸(窗口的尺寸) dst = cv.warpAffine(img, m, (w, h))cv.imshow('demo', dst) cv.waitKey() cv.destroyAllWindows()

opencv|opencv 几何变换之仿射变换
文章图片

复杂的仿射变换:可以进行平移 旋转等,由函数cv2.getAffineTransform()获取转换矩阵。
m = cv2.getAffineTransform(src, src1):
src:原图像的三个点坐标.(左上角,右上角,左下角)
src1:结果图像的对应的三个点坐标。
m:转换矩阵
注意:生成三个点的坐标矩阵时用np.float32(一个包括三个点坐标的二维数组)。
# 仿射变换中原图像平行的线,变换后也要平行。转换矩阵由函数获得。import cv2 as cv import numpy as npimg = cv.imread("picture\\timg.jpg") rows, cols = img.shape[:2]plt1 = np.float32([[50, 50],[150, 50],[50, 150]]) plt2 = np.float32([[100, 100],[200, 100],[100, 200]])m = cv.getAffineTransform(plt1, plt2)dst = cv.warpAffine(img, m, (cols, rows))cv.imshow('demo', img) cv.imshow('demo2', dst)cv.waitKey() cv.destroyAllWindows()

【opencv|opencv 几何变换之仿射变换】opencv|opencv 几何变换之仿射变换
文章图片

    推荐阅读