使用OpenCV和Python绘制旋转矩形报错求助
解决OpenCV绘制旋转矩形时的
minAreaRect报错问题 嘿,我太懂这个报错了!之前用OpenCV处理矩形的时候也踩过一模一样的坑,问题出在cv2.minAreaRect()的参数要求上——你给的输入格式不对。
错误原因
cv2.minAreaRect()函数的参数必须是一组形状为(N, 2)的点集合(简单说就是N个(x,y)坐标组成的二维数组),但你传入的boxes[i][1:]是[xmin, ymin, xmax, ymax]这种一维的4元素数组,它不是点集格式,所以OpenCV会抛出参数不合法的错误。
修复方案
你需要把[xmin, ymin, xmax, ymax]转换成四个顶点的点集,再传入minAreaRect。下面是修改后的完整代码:
import cv2 import numpy as np # 假设你的其他代码逻辑不变,替换这部分即可 xmin, ymin, xmax, ymax = boxes[i][1:] # 生成矩形的四个顶点,转成OpenCV要求的float32格式的点集 rect_points = np.array([ [xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax] ], dtype=np.float32) # 现在可以正常计算最小外接旋转矩形了 rect = cv2.minAreaRect(rect_points) box = cv2.boxPoints(rect) # 这里可以用np.int32替代np.int0,避免某些版本的警告 box = np.int32(box) cv2.drawContours(image, [box], 0, (0,0,255), 2)
额外提示
如果你只是想绘制原始轴对齐矩形的旋转最小外接矩形,上面的代码完全够用。另外,注意np.int0在部分OpenCV版本里可能会有类型警告,换成np.int32会更稳妥。
内容的提问来源于stack exchange,提问作者jejjejd
相关产品推荐
相关产品推荐

