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

Python Tuple使用问题:OpenCV绘制车牌矩形时参数类型报错排查

解决OpenCV cv2.line参数类型错误:Can't parse 'pt1'

问题场景

编写文本检测代码时,使用drawRedRectangleAroundPlate函数在原始图像imgOriginalScene上围绕车牌licPlate绘制红色旋转矩形。通过cv2.boxPoints获取旋转矩形的四个顶点后,调用cv2.line绘制四条红线,触发如下错误:

cv2.line(imgOriginalScene, tuple(p2fRectPoints[0]), tuple(p2fRectPoints[1]), SCALAR_RED, 2)         # draw 4 red lines
cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'line'
> Overload resolution failed:
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type

问题原因

cv2.boxPoints返回的顶点坐标是浮点数类型,但OpenCV的cv2.line等绘图函数要求坐标点必须是整数类型——图像像素位置为离散的整数索引,浮点数无法被解析。

解决方法

将cv2.boxPoints返回的坐标转换为整数类型,有两种常用方式:

方式1:转换整个坐标数组为整数

在获取顶点后直接将数组转为整数类型,代码更简洁高效:

# 获取旋转矩形顶点并转为整数
p2fRectPoints = cv2.boxPoints(licPlate).astype(int)
# 绘制四条红线
cv2.line(imgOriginalScene, tuple(p2fRectPoints[0]), tuple(p2fRectPoints[1]), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(p2fRectPoints[1]), tuple(p2fRectPoints[2]), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(p2fRectPoints[2]), tuple(p2fRectPoints[3]), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(p2fRectPoints[3]), tuple(p2fRectPoints[0]), SCALAR_RED, 2)

方式2:转换单个坐标点为整数

如果不需要修改整个数组,也可以在转换为tuple时逐个元素转成整数:

p2fRectPoints = cv2.boxPoints(licPlate)
# 绘制时将每个坐标元素转为int
cv2.line(imgOriginalScene, tuple(map(int, p2fRectPoints[0])), tuple(map(int, p2fRectPoints[1])), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(map(int, p2fRectPoints[1])), tuple(map(int, p2fRectPoints[2])), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(map(int, p2fRectPoints[2])), tuple(map(int, p2fRectPoints[3])), SCALAR_RED, 2)
cv2.line(imgOriginalScene, tuple(map(int, p2fRectPoints[3])), tuple(map(int, p2fRectPoints[0])), SCALAR_RED, 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:37