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

调用cv.pointPolygonTest报SystemError参数非元组错误如何解决

报错根因

这个报错是OpenCV Python绑定的参数格式校验不通过导致的,cv.pointPolygonTest对入参有严格要求,你当前两个参数都不符合规范:

  1. 第一个多边形轮廓参数要求是shape为(N, 1, 2)的numpy.float32类型数组,你当前传入的floorPoly_m是shape为(4,2)的二维数组,缺少了中间的维度
  2. 第二个待检测点参数要求是普通数值元组,你直接传入的numpy数组切片元素是numpy标量类型,不符合格式要求

修复方案

分两步调整代码即可:

  • 先把多边形数组转换为符合要求的格式
# 给现有(4,2)维度的数组增加中间维度,同时转成float32类型
floorPoly_m = floorPoly_m.reshape((-1, 1, 2)).astype(np.float32)
  • 遍历点的时候把numpy数组转成元组再传入函数
inFloor = np.array([cv.pointPolygonTest(floorPoly_m, tuple(pt), False) for pt in self.xyz[:,:2]]) >= 0

验证方法

修改完后可以先单独调用一次函数测试参数合法性,避免循环内报错:

# 取第一个点测试,正常会返回-1/0/1的数值结果
test_pt = tuple(self.xyz[0,:2])
print(cv.pointPolygonTest(floorPoly_m, test_pt, False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:03