一、问题如下:

  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()函数传参问题的更多相关文章

  1. 因OpenCV版本不一致所引发的报错

    目录 一 因OpenCV版本不一致所引发的报错 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 因OpenCV版本不一致所引发的报错 今天遇到了一个很有意思的报错. 事情是这样的, 在编译& ...

  2. 悉数 Python 函数传参的语法糖

    TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...

  3. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  4. 『Python × C++』函数传参机制学习以及对比

    一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...

  5. 函数传参传的是啥的思考【java Python】

    今天看<java 核心 卷1>的时候,作者提到了函数传参的问题,他提到,java传参,传的是值,而不是引用,然后,函数将要传的实参的值(如果实参是基本数据类型,那么就是值.如果实参是对象, ...

  6. python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  7. python 开发一款图片压缩工具(四):上传图床

    上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包.这篇的主要功能是实现图片上传. 图片上传功能的实现 通过 pngquant 压缩图片后,得到 ...

  8. python函数 传参的多种方式 解读

    1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: 2.带参数的函数调用: 函数定义了参数,那么 ...

  9. python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块

    ---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...

随机推荐

  1. drf之组件(认证、权限、排序、过滤、分页等)和xadmin、coreapi

    认证Authentication 可以在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_fr ...

  2. 【Java】调用摄像头进行拍照并保存【详细】以及处理no jniopencv_core in java.library.path的一种方法

    [之前困扰笔者的问题描述]   date:2019.12.18 网上教程很多,但是没有看见完整的,所以写一个出来. 调用摄像头需要javaCV的jar包和openCV的jar包,现在已经不需要安装包了 ...

  3. 另类WebShell监测机制--基于auditd

    鸣  谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...

  4. Dubbo 几个很实用但是很少人知道的功能

    dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能; 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...

  5. Java8新特性。

    常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...

  6. windows 下安装 composer

    友情链接 1. PHP 5.6 以上 2. php.ini 开启 : extension=php_openssl.dll extension=php_mbstring.dll extension=ph ...

  7. SQL SERVER-查看内存使用情况

    --使用内存的各对象 SELECT type, sum(virtual_memory_reserved_kb) as VM_Reserved, sum(virtual_memory_committed ...

  8. H3C 什么是漫游

  9. word 转pdf 再转图片--用在轻社群发文章

    #! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...

  10. linux设备驱动程序--hello-world

    linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到 ...