You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV逆透视变换实现方法咨询:能否还原Y轴45°旋转后的图像

解答

OpenCV反向透视变换支持说明

OpenCV原生提供了透视变换相关的全套工具,完全支持你需要的反向还原操作,核心依赖两个接口:cv2.getPerspectiveTransform() 用于生成透视变换矩阵,cv2.warpPerspective() 用于执行透视变换操作。只要你掌握原始变换的相关参数,完全可以从旋转后的图像还原出原始图像。

具体实现方法

分两种场景对应不同的实现逻辑:

  • 场景1:你保留了当初沿Y轴旋转45°时生成的透视变换矩阵
    这种场景操作最简单,直接对原始变换矩阵求逆,即可得到反向变换的矩阵,执行变换即可还原:
    示例代码如下:

    import cv2
    import numpy as np
    
    # 读取旋转后的图像
    img_rotated = cv2.imread("旋转后图像的本地路径")
    # M为当初执行Y轴旋转时用到的3*3透视变换矩阵
    M_inv = np.linalg.inv(M)
    # 填入原始图像的宽度、高度参数即可得到还原后的原图
    img_restored = cv2.warpPerspective(img_rotated, M_inv, (original_width, original_height))
    
  • 场景2:你已经丢失了原始的透视变换矩阵
    这种情况需要先获取4组一一对应的关键点坐标,分别来自旋转后图像和原始图像(可选图像四角、前景物体的明显特征点等),通过对应点计算反向变换矩阵后再执行还原:
    示例代码如下:

    import cv2
    import numpy as np
    
    # 读取旋转后的图像
    img_rotated = cv2.imread("旋转后图像的本地路径")
    # 旋转后图像上的4个关键点坐标,按顺序排列
    pts_rotated = np.float32([[p1_x, p1_y], [p2_x, p2_y], [p3_x, p3_y], [p4_x, p4_y]])
    # 原始图像上和上述4个点一一对应的坐标
    pts_original = np.float32([[p1_x_o, p1_y_o], [p2_x_o, p2_y_o], [p3_x_o, p3_y_o], [p4_x_o, p4_y_o]])
    
    # 计算反向变换矩阵
    M_inv = cv2.getPerspectiveTransform(pts_rotated, pts_original)
    # 执行变换得到还原后的原图
    img_restored = cv2.warpPerspective(img_rotated, M_inv, (original_width, original_height))
    

补充说明

如果当初执行旋转操作时你开启了边缘填充避免裁剪,还原后的图像边缘会存在填充的无效区域,你可以根据原始图像的尺寸自行裁剪去除。不考虑像素插值模糊的前提下,只要变换矩阵或标注的关键点精度足够,还原后的图像几何结构可以完全匹配原始输入。

内容的提问来源于stack exchange,提问作者Joymaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:15:00