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

使用cv2.getPerspectiveTransform()触发(-215:Assertion failed)错误求助

解决cv2.getPerspectiveTransform()的(-215:Assertion failed)错误

错误原因

cv2.getPerspectiveTransform()用于计算透视变换的单应矩阵,这个函数强制要求输入的源点和目标点必须各为4组不共线的对应点(透视变换矩阵是3x3结构,有8个自由度,需要4个点才能唯一求解)。你传入了9组点,不符合函数的输入要求,因此触发断言失败错误。

解决方案

1. 计算透视变换矩阵(仅需4组对应点)

从你的源点和目标点中选择4个不共线的对应角点,比如四个顶点:

import numpy as np
import cv2

# 选择4组对应角点
srcpoints = np.array([[0,0], [200,0], [200,200], [0,200]], np.float32)
targetpoints = np.array([[60,60], [1860,60], [1860,1020], [60,1020]], np.float32)

# 计算透视变换矩阵
matrix = cv2.getPerspectiveTransform(srcpoints, targetpoints)

2. 转换所有9个点(先算矩阵,再批量转换)

如果需要将所有9个源点都转换到目标坐标系,先用4个点算出矩阵,再用cv2.perspectiveTransform()批量处理:

import numpy as np
import cv2

# 原始所有源点
all_src = np.array([[0,0],[100,0],[200,0],[0,100],[100,100],[200,100],[0,200],[100,200],[200,200]], np.float32)
# 选4组对应角点用于计算矩阵
src_matrix_points = np.array([[0,0], [200,0], [200,200], [0,200]], np.float32)
target_matrix_points = np.array([[60,60], [1860,60], [1860,1020], [60,1020]], np.float32)

# 计算透视变换矩阵
matrix = cv2.getPerspectiveTransform(src_matrix_points, target_matrix_points)
# 批量转换所有点,注意要增加一个维度(函数要求输入为(N,1,2)的形状)
all_transformed_points = cv2.perspectiveTransform(all_src[np.newaxis, :, :], matrix)[0]
print(all_transformed_points)

注意事项

  • 用于计算矩阵的4个点不能共线,否则无法求出有效透视矩阵。
  • 实际场景中的小数坐标不影响,只要保证是np.float32类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:23:27