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 ...
随机推荐
- drf之组件(认证、权限、排序、过滤、分页等)和xadmin、coreapi
认证Authentication 可以在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_fr ...
- 【Java】调用摄像头进行拍照并保存【详细】以及处理no jniopencv_core in java.library.path的一种方法
[之前困扰笔者的问题描述] date:2019.12.18 网上教程很多,但是没有看见完整的,所以写一个出来. 调用摄像头需要javaCV的jar包和openCV的jar包,现在已经不需要安装包了 ...
- 另类WebShell监测机制--基于auditd
鸣 谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...
- Dubbo 几个很实用但是很少人知道的功能
dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能; 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...
- Java8新特性。
常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...
- windows 下安装 composer
友情链接 1. PHP 5.6 以上 2. php.ini 开启 : extension=php_openssl.dll extension=php_mbstring.dll extension=ph ...
- SQL SERVER-查看内存使用情况
--使用内存的各对象 SELECT type, sum(virtual_memory_reserved_kb) as VM_Reserved, sum(virtual_memory_committed ...
- H3C 什么是漫游
- word 转pdf 再转图片--用在轻社群发文章
#! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...
- linux设备驱动程序--hello-world
linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到 ...