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

OpenCV中cv2.polylines报错(-215:Assertion failed)的解决方法咨询

OpenCV中cv2.polylines报错(-215:Assertion failed)的解决方法咨询

问题描述

我运行以下代码时遇到了断言错误:

# Get the minimum area rectangle for the contour
min_rect = cv2.minAreaRect(contour)  # Returns (center, (width, height), angle)
box = cv2.boxPoints(min_rect)  # Get four corner points of the rectangle
box = np.int8(box)  # Convert to integer coordinates

# Draw the rotated bounding box
cv2.polylines(frame, [box], True, (0, 255, 0), 2)

报错的代码行及错误信息如下:

报错代码行:

cv2.polylines(frame, [box], True, (0, 255, 0), 2)

错误信息:

cv2.error: OpenCV(4.10.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2465: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'cv::polylines'.

请问该如何解决这个问题?


解决方法

你好,这个报错的核心原因很明确:OpenCV的cv2.polylines函数要求传入的点集必须是32位整数类型(对应NumPy的np.int32),但你代码里用np.int8(box)把坐标转换成了8位整数,类型不匹配触发了断言检查失败。

只需要修改一行代码就能解决:
把box = np.int8(box)替换成box = np.int32(box),让坐标格式符合OpenCV绘图函数的要求。

修改后的完整代码如下:

# Get the minimum area rectangle for the contour
min_rect = cv2.minAreaRect(contour)  # Returns (center, (width, height), angle)
box = cv2.boxPoints(min_rect)  # Get four corner points of the rectangle
box = np.int32(box)  # 转换为32位整数坐标,适配OpenCV要求

# Draw the rotated bounding box
cv2.polylines(frame, [box], True, (0, 255, 0), 2)

如果修改后仍然报错,可以额外检查两个点:

  • 确认frame是有效的图像对象,格式为uint8(这是OpenCV图像的标准格式)
  • 确认contour是通过cv2.findContours等方法获取的有效轮廓对象

不过绝大多数情况下,类型转换的问题就是这个报错的根源,修改后应该就能正常运行了。

备注:内容来源于stack exchange,提问作者jhansi cheruku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:08:06