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)