上述代码报错: M = cv2.getPerspectiveTransform(points, new_points) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\imgwarp.cpp:3522: error: (-215:Assertion failed) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function 'cv::getPerspectiveTransform'
时间: 2023-07-23 21:06:58 浏览: 214
这个错误提示中提到了一个断言错误,意味着输入参数不满足函数要求。具体地说,函数 `cv2.getPerspectiveTransform()` 要求输入参数 `points` 和 `new_points` 应该是 4 行 2 列的浮点数矩阵。请检查一下你的输入参数是否满足这个要求,如果不满足,可以尝试将它们转换为正确的格式。
相关问题
Traceback (most recent call last): File "D:\python project\tommyself.py", line 28, in <module> borders = cv2.boxPoints(borders) cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'boxPoints' > Overload resolution failed: > - Can't parse 'box' as RotatedRect. Expected sequence length 3, got 4 > - Can't parse 'box' as RotatedRect. Expected sequence length 3, got 4 这段代码出现了以下报错应该怎么改
这个报错可能是因为 `cv2.boundingRect()` 返回的 `borders` 数组长度不正确,导致在调用 `cv2.boxPoints()` 函数时出错。
你可以检查一下 `borders` 数组的长度是否为 4,如果是的话,你可以尝试修改代码为:
```
# 获取边框
x, y, w, h = cv2.boundingRect(opened)
borders = np.array([[x, y], [x, y+h], [x+w, y+h], [x+w, y]])
# 绘制边框线
cv2.polylines(frame, [borders], True, (0, 0, 255), 2)
# 获取边框线坐标
points = borders.reshape(4, 2)
```
这里使用 `cv2.boundingRect()` 函数返回的矩形的左上角坐标 `(x, y)`、宽度 `w` 和高度 `h` 来计算边框的四个顶点坐标,然后将这些坐标存储在一个 4x2 的数组中,并将其传递给 `cv2.polylines()` 函数来绘制边框线。
如果上述方法还是无法解决问题,你可以尝试升级 OpenCV 版本或者尝试其他的解决方案。
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\shapedescr.cpp:315: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::contourArea'
这个错误是由于使用了cv2.contourArea函数时,输入的轮廓点数npoints小于0或者深度depth不是CV_32F或CV_32S造成的。可以检查一下输入的轮廓是否正确,轮廓点数是否为正,以及深度是否为CV_32F或CV_32S。如果还有问题,可以提供具体的代码和数据,我可以帮你进一步分析。
阅读全文