OpenCV:图像平移、图像缩放、图像旋转、仿射变换、投影
import numpy as np
import cv2
def PY(img, x, y):
H = np.float32([[1, 0, x], [0, 1, y]]) #x,y方向移动距离
h, w = img.shape[:2] #得到修改图像大小的参数,可自行设定
print(h, w)
py = cv2.warpAffine(img, H, (w, h))
'''仿射变换函数:cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)
src:输入图像
M:变换矩阵
desize:输出图像大小
flags:插值方式的组合(int类型)
borderMode:边界像素模式
borderValue:边界填充值,默认为0
其中:
M为InputArray类型的2*3的变换矩阵
flages表示插值方式,默认cv2.INTER_LINEAR(线性插值)
还有:cv2.INTER_NEAREST(最近邻插值)
cv2.INTER_AREA(区域插值)
cv2.INTER_LANCZOS4(Lanczos插值)
'''
cv2.imshow('平移', py)
def SF(img, x, y):
# sf = cv2.resize(img, None, fx=x, fy=y, interpolation=cv2.INTER_NEAREST) #使用缩放倍数
sf = cv2.resize(img, [600, 1200], interpolation=cv2.INTER_NEAREST) #使用dsize
cv2.imshow('缩放', sf)
'''
cv2.resize(src, dsize, fx, fy, interpolation)
src输入图像
dsize输出图像尺寸
fx, fy缩放倍数 与dsize二选一
interpolation插值方式
默认cv2.INTER_LINEAR(线性插值)
还有:cv2.INTER_NEAREST(最近邻插值)
cv2.INTER_AREA(区域插值)
cv2.INTER_LANCZOS4(Lanczos插值)
'''
def XZ(img, x, y):
h, w = img.shape[:2]
H = cv2.getRotationMatrix2D([h/2, w/2], x, y)
'''cv2.getRotationMatrix2D(center, angle, scale)
center旋转中心
angle旋转角度
scale缩放比例,正逆负顺
-5表示:顺时针旋转,并将图片放大两倍
为负值时好像有问题
'''
xz = cv2.warpAffine(img, H, (w, h))
cv2.imshow('旋转', xz)
def FS(img):
h, w = img.shape[:2]
pos1 = np.float32([[50, 290], [200, 80], [200, 500]]) #三点组成一个三角形
pos2 = np.float32([[350, 290], [200, 80], [200, 500]]) #变换后的三角形对比原始三角形,图形对应进行修改
M = cv2.getAffineTransform(pos1, pos2)
'''cv2.getAffineTransform(pos1, pos2)
需要三个点
pos1变换前位置
pos2变换后位置
'''
fs = cv2.warpAffine(img, M, (w, h))
cv2.imshow('仿射变换', fs)
def TY(img):
h, w = img.shape[:2]
pos1 = np.float32([[50, 50], [50, 200], [200, 50], [200, 200]])
pos2 = np.float32([[50, 90], [100, 100], [200, 100], [300, 200]])
M = cv2.getPerspectiveTransform(pos1, pos2)
ty = cv2.warpPerspective(img, M, (w, h))
cv2.imshow('投影', ty)
img = cv2.imread('可莉.png')
img = cv2.resize(img, [384, 683]) #修改的是[w, h]
cv2.imshow('原图', img)
PY(img, 50, 100)
SF(img, 2, 2)
XZ(img, 30, 1)
FS(img)
TY(img)
cv2.waitKey()
cv2.destroyAllWindows()
参考:
https://www.bilibili.com/video/BV1xe4y1R7j2/?spm_id_from=333.788&vd_source=b89ce2a9b55dab86caa0ee60b66c9f86