利用opencv实现仿射变换一般会涉及到warpAffine和getRotationMatrix2D两个函数,其中warpAffine可以实现一些简单的重映射,而getRotationMatrix2D可以获得旋转矩阵。
1、cv.warpAffine(src, M, dsize, flags, borderMode, borderValue)
src: 输入图像 M: 2x3的变换矩阵 dsize: 指定图像输出尺寸 flags: 插值算法标识符,有默认值INTER_LINEAR。
borderMode: 边界像素模式,有默认值BORDER_CONSTANT borderValue: 边界取值,有默认值Scalar()即0
2、cv.getRotationMatrix2D(center, angle, scale)
center: 变换中心坐标 angle: 旋转的角度 scale: 缩放因子
#-*-coding:utf-8-*-
import numpy as np
import cv2 as cv
print("________Hello python________")
filename = ("face.jpg")
src = cv.imread(filename)
# cv.namedWindow("face", cv.WINDOW_AUTOSIZE)
h, w = src.shape[:2] #读取图片的高和宽
A1 = np.array([[2, 0, 0], [0, 2, 0]], np.float32) # 缩放矩阵2x3
d1 = cv.warpAffine(src, A1, (2*w, 2*h), borderValue=125)
A2 = np.array([[0.5, 0, w/4], [0, 0.5, h/4]], np.float32) # 缩放、平移
d2 = cv.warpAffine(src, A2, (w, h), borderValue=125)
A3 = cv.getRotationMatrix2D((w/2, h/2), 30, 1) # 旋转矩阵:变换中心(w/2, h/2), 旋转角度30
d3 = cv.warpAffine(d2, A3, (w, h), borderValue=125)
#输入,输出,X缩放因子,Y缩放因子,插值方法
res = cv.resize(src, (2*w, 2*h), fx=2, fy=2, interpolation=cv.INTER_CUBIC)
cv.imshow("face", src)
cv.imshow("d1", d1)
cv.imshow("d2", d2)
cv.imshow("d3", d3)
cv.imshow("res", res)
cv.waitKey(0)
cv.destroyAllWindows()
网友评论