cnts,hierarchy= cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, ValueError: not enough values to unpack (expected 2, got 1)解决此问题
当你遇到cv2.findContours()
函数返回错误"not enough values to unpack (expected 2, got 1)",这通常是因为函数期望返回两个值(轮廓列表和层次结构),但实际上它只返回了一个。这个错误发生在OpenCV版本4.x之后,findContours()
的默认行为发生了变化,不再直接返回层次信息。
为了解决这个问题,你需要明确指定你想要获取的结果。你可以通过设置cv2 RETR_TREE
标志来获取层次结构,同时使用cv2.CHAIN_APPROX_SIMPLE
来压缩轮廓表示。这里是修改后的代码示例:
import cv2
# 其他步骤...
thresh = ... # 二值化图像
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
在这个例子中,RETR_TREE
会返回一个嵌套的轮廓树,CHAIN_APPROX_SIMPLE
会让OpenCV使用更紧凑的方式存储轮廓数据。现在你应该能得到预期的两个值了。
cnts = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv2.findContours()函数是用于寻找图像中的轮廓的函数。该函数会返回三个参数:第一个参数是二值化图像,第二个参数是轮廓检索模式(RETR_TREE表示检索所有轮廓并建立轮廓之间的层级关系),第三个参数是轮廓逼近方法(CHAIN_APPROX_NONE表示保留轮廓的所有点)。函数返回的第一个参数cnts是一个包含所有轮廓的列表,每个轮廓由一系列点的坐标组成。
cnts, h = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
这是一段使用OpenCV库中的findContours函数进行轮廓检测的代码。其中,close是一个二值化图像,cv2.RETR_TREE表示检测所有轮廓并建立轮廓之间的层级关系,cv2.CHAIN_APPROX_SIMPLE表示只保留轮廓的端点,将轮廓转化为简单的线段。findContours函数会返回两个值,第一个是轮廓信息(包括每个轮廓的点集),第二个是轮廓的层级信息。
相关问题:
- 什么是轮廓检测?
- OpenCV中还有哪些常用的图像处理函数?
- 如何使用OpenCV进行图像二值化操作?
相关推荐
















