在cv2.findContours函数使用中,报ValueError: not enough values to unpack (expected 3, got 2)

cv2.findContours()函数

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  

其中
第一个参数是需要寻找轮廓的图像;
第二个参数是轮廓的检索模式,有四种方式:

  • cv2.RETR_EXTERNAL表示只检测外轮廓
  • cv2.RETR_LIST检测的轮廓不建立等级关系
  • cv2.RETR_LIST检测的轮廓不建立等级关系
  • cv2.RETR_TREE建立一个等级树结构的轮廓;

这四种方法一个一个尝试,看一下哪种方法比较合适项目要求
第三个参数method为轮廓的近似办法,有三种方法:

  • cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1;
  • cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息;
  • cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。

在使用cv2.findContours()函数来查找检测物体的轮廓,根据网络上的教程复制以下代码:

image,cnts,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

运行报了以下错误:

image,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)

看了python cv2.findContours()函数,发现这是因为opencv版本的问题
我查看配置环境的opencv版本,版本为4.5.5

import cv2
print(cv2.__version__)

对于opencv3会返回三个值,分别是img, countours, hierarchy,而对于注:opencv4会返回两个值,分别是countours, hierarchy
因此,对于上面错的错误,我解决方法如下:

contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

你可能感兴趣的:(错误,opencv,python,计算机视觉)