contribute上次修改:2026-09-29

透视变换


date created: 2026-9-23 21:42 date modified: 2026-9-23 21:42

OpenCV 透视变换三函数笔记

1. cv2.getPerspectiveTransform

功能:由 4 对对应点计算 3×3 透视变换矩阵。

H = cv2.getPerspectiveTransform(src, dst)
项目 说明
输入 src 源图像上的 4 个点,形状 (4,1,2) 或 (4,2),float32
输入 dst 目标图像上的 4 个点,形状同上
输出 H 3×3 矩阵,float64
方向 dst = H · src(齐次坐标)
注意 点顺序要一致,通常:左上、右上、右下、左下

2. cv2.warpPerspective

功能:对整张图像做透视变换。

warped = cv2.warpPerspective(src, M, dsize, flags=cv2.INTER_LINEAR)
项目 说明
输入 src 原始图像
输入 M 3×3 变换矩阵,一般传 H
输入 dsize 输出尺寸,格式 (width, height)
输入 flags 插值方式,默认 INTER_LINEAR;加 WARP_INVERSE_MAP 表示 M 是目标→源
输出 变换后的图像,尺寸为 dsize
方向 默认 M 是源→目标,OpenCV 内部反查采样
注意 dsize 是 (宽, 高),不是 (高, 宽)

3. cv2.perspectiveTransform

功能:对一组点做透视变换。

pts_dst = cv2.perspectiveTransform(pts_src, M)
项目 说明
输入 pts_src 点集,形状 (N,1,2) 或 (1,N,2),float32 / float64
输入 M 3×3 变换矩阵
输出 pts_dst 变换后的点集,形状同输入
方向 pts_dst = M · pts_src(齐次后归一化)
注意 输入必须是浮点型;输出也是浮点,画图前转 int

方向与逆矩阵

H = cv2.getPerspectiveTransform(src, dst)   # 原图 → 标准图
H_inv = cv2.getPerspectiveTransform(dst, src) # 标准图 → 原图
# 或 H_inv = np.linalg.inv(H)
  • H:原图坐标 → 标准图坐标
  • H_inv逆矩阵:标准图坐标 → 原图坐标

典型用法:

# 原图找地图角点 → 算 H
H = cv2.getPerspectiveTransform(src, dst)
H_inv = cv2.getPerspectiveTransform(dst, src)

# 整图矫正,得到标准图
warped = cv2.warpPerspective(frame, H, (W, H))

# 在 warped 上识别角色,得到标准图坐标 pts_std
# 把点映射回原图
pts_orig = cv2.perspectiveTransform(pts_std, H_inv)

# 在原图上画
for (x, y) in pts_orig.reshape(-1, 2):
    cv2.circle(frame, (int(x), int(y)), 5, (0,0,255), -1)

一句话:
getPerspectiveTransform 算矩阵,warpPerspective 变整图,perspectiveTransform 变点集。
原图→标准图用 H,标准图→原图用 H_inv。

留言区

不收集任何个人信息;昵称只绑定浏览器里的随机 Cookie。