• 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
  • 相关阅读:
    juqery 点击分页显示,指定一页显示多少个,首次加载显示多少个
    PHP指定时间戳/日期加一天,一年,一周,一月
    POJ 2955 Brackets 区间合并
    zoj 3537 Cake 区间DP (好题)
    DP——最优三角形剖分
    LightOJ 1422 Halloween Costumes
    POJ 1738 石子合并2 GarsiaWachs算法
    NIOP1995 石子合并(区间DP)
    POJ 2429
    pollard_rho和Miller_Rabin
  • 原文地址:https://www.cnblogs.com/guobin-/p/10842486.html
Copyright © 2020-2023  润新知