射变换是一种二维图像变换,可以通过旋转、缩放、平移和倾斜等操作改变图像的几何结构,同时保持图像中平行线的平行性。
主要是要涉及到仿射变换的M矩阵的推导,以及M矩阵的逆推导。
示例:主要用在yolov5的处理中
import numpy as np
import matplotlib.pyplot as plt
import cv2
def inv_align(M):
k=M[0,0]
b1=M[0,2]
b2=M[1,2]
return np.array(
[[1/k,0,-b1/k],
[0,-k/1,-b2/k]]
)
def align(image,dst_image):
orign_h,orign_w=image.shape[:2]
dst_h,dst_w=dst_image
k=min(dst_h/orign_h,dst_w/orign_w)
M=np.array([
[k,0,-k*orign_w*0.5+dst_w*0.5],
[0,k,-k*orign_h*0.5+dst_h*0.5]
])
return cv2.warpAffine(image,M,dst_image) ,inv_align(M)
if __name__=="__main__":
cat1=cv2.imread("cat1.png")
dst_image,M=align(cat1,(640,640))
cv2.imwrite("./dst_image.png",dst_image)
plt.imshow(dst_image[...,::-1])