天天看点

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 np


img = 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 几何变换之仿射变换仿射变换可以用来平移图像:

复杂的仿射变换:可以进行平移 旋转等,由函数cv2.getAffineTransform()获取转换矩阵。

m = cv2.getAffineTransform(src, src1):

src:原图像的三个点坐标.(左上角,右上角,左下角)

src1:结果图像的对应的三个点坐标。

m:转换矩阵

注意:生成三个点的坐标矩阵时用np.float32(一个包括三个点坐标的二维数组)。

# 仿射变换中原图像平行的线,变换后也要平行。转换矩阵由函数获得。

import cv2 as cv
import numpy as np


img = 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 几何变换之仿射变换仿射变换可以用来平移图像: