ret,img_threshold = cv2.threshold(img_laplace,3,40,cv2.THRESH_BINARY) plt.imshow(img) contours,hierarchy = cv2.findContours(img_threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 为什么错了
时间: 2023-08-13 10:20:19 浏览: 142
根据提供的代码,可能会出现两个问题:
1. `img_laplace`这个变量没有定义或者没有赋值,因此`cv2.threshold()`函数的第一个参数无法传递正确的图像数据,会导致程序抛出异常。需要确保`img_laplace`已经定义或者赋值,并且是一个灰度图像。
2. 在OpenCV的不同版本中,`cv2.findContours()`函数的返回值格式可能不同。如果你使用的是OpenCV 2.x版本,那么返回值只有两个,格式是`contours,hierarchy = cv2.findContours(img_threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)`。但是如果你使用的是OpenCV 3.x或者4.x版本,那么返回值是三个,格式是`img,contours,hierarchy = cv2.findContours(img_threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)`。因此,如果你使用的是后者,应该将`contours,hierarchy`改为`img,contours,hierarchy`。
综上所述,可以尝试修改代码为以下形式:
```
img_laplace = cv2.Laplacian(img_gray,cv2.CV_8U,ksize=3)
ret,img_threshold = cv2.threshold(img_laplace,3,40,cv2.THRESH_BINARY)
plt.imshow(img)
contours,hierarchy = cv2.findContours(img_threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
```
或者:
```
img_laplace = cv2.Laplacian(img_gray,cv2.CV_8U,ksize=3)
ret,img_threshold = cv2.threshold(img_laplace,3,40,cv2.THRESH_BINARY)
plt.imshow(img)
_,contours,hierarchy = cv2.findContours(img_threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
```
阅读全文