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
相关产品推荐
相关产品推荐

