视觉处理之仿射变换

发布时间:2024年01月16日

什么是仿射变换

射变换是一种二维图像变换,可以通过旋转、缩放、平移和倾斜等操作改变图像的几何结构,同时保持图像中平行线的平行性。
主要是要涉及到仿射变换的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])


文章来源:https://blog.csdn.net/wh22141334/article/details/135627424
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。