这个错误提示通常表示某个变量返回了None,而代码尝试对其进行解包操作。在这里,错误可能出现在 cv2.findContours 函数返回值上。因此,你需要检查 contours 和 hierarchy 变量是否被成功赋值。
在 OpenCV 的早期版本中,cv2.findContours 函数只返回轮廓信息,没有层级信息。如果你使用的是这样的版本,那么在赋值时,应该只获取一个返回值。在后续版本中,该函数返回一个元组,包含轮廓信息和层级信息,因此需要使用两个变量接收返回值。
你可以尝试使用下面的代码来检查问题:
import cv2
if __name__ == '__main__':
img = cv2.imread("G:\\1.jpg") # 读取图像
cv2.imshow('img', img)
imag = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度值图(图像,方法)
ret, Binary = cv2.threshold(imag, 30, 255, cv2.THRESH_BINARY)
# 寻找轮廓
contours, hierarchy = cv2.findContours(Binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# 检查轮廓是否成功获取
if contours is not None:
cv2.drawContours(img,contours,-1,(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey()
如果 contours 变量为 None,你需要尝试调整阈值或者调整 cv2.findContours 函数的参数,以便更好地识别轮廓。