gpt4 book ai didi

python - 如何在 opencv 4.4.0 版上正确使用 cv2.findContours()?

转载 作者:行者123 更新时间:2023-12-02 17:16:48 25 4
gpt4 key购买 nike

我试图在 opencv 4.4.0 版上使用 cv2.findContours()。 (我使用的是 Python 3.8.5 版)但它抛出了一个错误,我无法弄清楚。我不确定代码有什么问题。这是一些背景:

  • 根据 OpenCV, cv2.findContours() 的语法如下:
    Python:
    轮廓,层次= cv.findContours(图像,模式,方法[,轮廓[,层次[,偏移]]])
  • 我找了一些例子来确保如何正确实现它,这是我发现的:
    示例 1
    _, 轮廓, _ = cv2.findContours(binary_image,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

  • 例子2
    (_, cnts, _) = cv2.findContours(thresholded.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    这些是我在网上找到的工作项目,有很多这样的例子。所以,我试图实现我从视频中获得的一些代码,以对该主题有一些了解,但它似乎对我不起作用,我找不到原因。代码如下:
    import cv2 
    import numpy as np

    imagen =cv2.imread('lettuce.jpg')
    gray = cv2.cvtColor(imagen,cv2.COLOR_BGR2GRAY)
    _,binary = cv2.threshold(gray,100,255,cv2.THRESH_BINARY)

    image,contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

    cv2.drawContours(image,contours, -1, (0,255,0),3)
    错误:
    回溯(最近一次调用最后一次):
    第 8 行,在
    图像,轮廓,层次结构 = cv2.findContours(二进制,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
    ValueError:没有足够的值来解包(预期为 3,得到 2)

    最佳答案

    在 Python/OpenCV 4.4.0 中,findContours 仅返回 2 个值,您列出了 3 个。
    你展示:

    image,contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

    OpenCV 4.4.0,列出:
    contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

    请始终检查文档。看
    https://docs.opencv.org/4.4.0/d3/dc0/group__imgproc__shape.html#gadf1ad6a0b82947fa1fe3c3d497f260e0
    如果您只想要轮廓,则以独立于版本的方式处理此问题的一种方法是(归功于@nathancy):
    contours = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    contours = contours[0] if len(contours) == 2 else contours[1]

    如果您不想要所有嵌套轮廓,则使用 RETR_EXTERNAL 而不是 RETR_LIST。

    关于python - 如何在 opencv 4.4.0 版上正确使用 cv2.findContours()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64345584/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com