Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题
一、问题如下:
cv2.findContours()这个方法是用来找出轮廓值的:
# cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓
binary, contours, h = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
但是在运行时,我所使用的opencv-python4.1.0.25则报错:

错误信息:
ValueError: not enough values to unpack (expected 3, got 2)
值错误:没有足够的值解包(应为3,得到2)
二、问题解决:
1、降级(或升级)OpenCV:
我在python中安装的第三方库是OpenCV4.1.0.25,所以这里要降级处理:
pip3 install opencv-python==3.4.3.18
使用pip将版本降为3.4.3.18。


降级之后,PyCharm中可以看到现在的版本号:

(如果是OpenCV2则要升级到OpenCV3)
2、解析差异:
OpenCV2和OpenCV4中:
findContours这个轮廓提取函数会返回两个值:
①轮廓的点集(contours)
②各层轮廓的索引(hierarchy)
OpenCV3中:
则会返回三个值:
①处理的图像(image)
②轮廓的点集(contours)
③各层轮廓的索引(hierarchy)
三、cv2.findContours()相关:
1、参数:
①第一个参数:
| 寻找轮廓的图像 |
②第二个参数表示轮廓的检索模式,有四种:
| cv2.RETR_EXTERNAL | 只检测外轮廓 |
| cv2.RETR_LIST | 检测的轮廓不建立等级关系 |
| cv2.RETR_CCOMP | 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息 |
| cv2.RETR_TREE | 建立一个等级树结构的轮廓 |
③第三个参数method为轮廓的近似办法:
| cv2.CHAIN_APPROX_SIMPLE | 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标(矩形只需四顶点) |
| cv2.CHAIN_APPROX_TC89_L1 | 使用teh-Chinl chain 近似算法 |
| CV_CHAIN_APPROX_TC89_KCOS | |
| cv2.CHAIN_APPROX_NONE | 存储所有的轮廓点,相邻的两个点的像素位置差不超过1 |
Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题的更多相关文章
- 因OpenCV版本不一致所引发的报错
目录 一 因OpenCV版本不一致所引发的报错 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 因OpenCV版本不一致所引发的报错 今天遇到了一个很有意思的报错. 事情是这样的, 在编译& ...
- 悉数 Python 函数传参的语法糖
TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- 『Python × C++』函数传参机制学习以及对比
一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...
- 函数传参传的是啥的思考【java Python】
今天看<java 核心 卷1>的时候,作者提到了函数传参的问题,他提到,java传参,传的是值,而不是引用,然后,函数将要传的实参的值(如果实参是基本数据类型,那么就是值.如果实参是对象, ...
- python中给函数传参是传值还是传引用
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- python 开发一款图片压缩工具(四):上传图床
上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包.这篇的主要功能是实现图片上传. 图片上传功能的实现 通过 pngquant 压缩图片后,得到 ...
- python函数 传参的多种方式 解读
1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: 2.带参数的函数调用: 函数定义了参数,那么 ...
- python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块
---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...
随机推荐
- Kruskal算法&Prim算法
最小生成树是什么? Kruskal算法 图文转载自a2392008643的博客 此算法可以称为"加边法",初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最 ...
- JavaScript 数组(二)数组练习
1.求一组数中的最大值和最小值,以及所在位置(最大值和最小值在这组数中的位置) var numbers = [120, 13, 101, 88, 10, 25]; var max = numbers[ ...
- Spring Cloud Sleuth 整合
引入Maven依赖 org.springframework.cloud spring-cloud-starter-sleuth 日志发生的变化 当应用ClassPath下存在org.springfre ...
- Ubuntu下 安卓 adb 命令报:“insufficient permissions for device: user in plugdev group; ”问题的解决办法
https://blog.csdn.net/freezingxu/article/details/80893025 在接入设备进行联机调试的时候,遇到了这样的问题: insufficient perm ...
- windows自动化-脚本案例
; Script Start - Add your code below here Run("D:\Navicat Premium\navicat.exe") Sleep(1000 ...
- pandas 之 数据清洗-缺失值
Abstract During the course fo doing data analysis and modeling, a significant amount of time is spen ...
- Dockerfile(从无到有创建镜像)
本文原始地址:https://sitoi.cn/posts/43818.html 结构 DockerFile分为四部分组成: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 基础镜像信息 ...
- Windows下安装Zabbix agent
下载Windows版本的Zabbix agent安装包:https://www.zabbix.com/cn/download_agents#tab:40LTS 有两种安装方式: (1)需要手动安装,安 ...
- 第二篇 -- C#中对XML操作
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
- ECHO命令输出空行的11种方法和效率
标题: 批处理技术内幕:ECHO命令作者: Demon链接: http://demon.tw/reverse/cmd-internal-echo.html版权: 本博客的所有文章,都遵守“署名-非商业 ...