contour = cv2.convexHull(contour) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\convhull.cpp:143: error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'
时间: 2023-07-23 19:09:04 浏览: 84
这个错误可能是由于传递给 `cv2.convexHull` 方法的轮廓 `contour` 格式不正确引起的。确保 `contour` 变量的形状是 `(N, 1, 2)`,其中 `N` 是轮廓点的数量。如果您已经使用 `cv2.findContours` 查找了轮廓,那么 `contour` 变量应该已经符合要求,否则您可以使用以下代码将其转换为正确的格式:
```
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0]
contour = contour.reshape(-1, 1, 2)
```
在上面的代码中,我们假设 `thresh` 是二值化后的图像,`cv2.RETR_EXTERNAL` 表示只查找最外层的轮廓,`cv2.CHAIN_APPROX_SIMPLE` 表示使用简单的逼近方法来压缩轮廓。
如果您仍然遇到问题,请检查您的 OpenCV 版本是否正确安装,并确保您的轮廓变量格式正确。同时,也有可能是您的轮廓在某些情况下无法形成凸包,您可以尝试检查轮廓的形状是否正确,并使用其他的方法来处理轮廓。
相关问题
psc = cv2.createShapeContextDistanceExtractor().computeDistance(contour, contour) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv_contrib\modules\shape\src\sc_dis.cpp:204: error: (-215:Assertion failed) (set1.channels()==2) && (set1.cols>0) in function 'cv::ShapeContextDistanceExtractorImpl::computeDistance'
这个错误可能是由于传递给 `computeDistance` 方法的轮廓 `contour` 格式不正确引起的。确保 `contour` 变量的形状是 `(N, 1, 2)`,其中 `N` 是轮廓点的数量。如果您已经使用 `cv2.findContours` 查找了轮廓,那么 `contour` 变量应该已经符合要求,否则您可以使用以下代码将其转换为正确的格式:
```
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0]
contour = contour.reshape(-1, 1, 2)
```
在上面的代码中,我们假设 `thresh` 是二值化后的图像,`cv2.RETR_EXTERNAL` 表示只查找最外层的轮廓,`cv2.CHAIN_APPROX_SIMPLE` 表示使用简单的逼近方法来压缩轮廓。
如果您仍然遇到问题,请检查您的 OpenCV 版本是否正确安装,并确保您的轮廓变量格式正确。
contour = sorted(contour, key = cv2.contourArea, reverse=True)#对一系列轮廓点坐标按它们围成的区域面积进行排序 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() 函数使用了错误的参数或参数类型而引起的。该函数的第一个参数应该是一个轮廓点坐标的numpy数组,第二个参数应该是可选的,通常是False。在该函数中出现问题的原因可能是轮廓点坐标数组的格式不正确,或者是该数组为空或未定义。
您可以检查一下传递给cv2.contourArea()函数的输入参数是否正确,并且确保输入参数包含正确的轮廓点坐标。如果输入参数正确,您还可以检查一下OpenCV版本是否正确,或者尝试卸载并重新安装OpenCV。