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

2024-04-03

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

根据 OpenCV 的语法cv2.findContours()如下: Python:contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

我寻找了一些示例来确保如何正确实现它,这是我发现的:

  • 示例1

    (_, contours, _) = 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)

Error:

Traceback (most recent call last):
  line 8, in <module>
    image,contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 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 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 opencv 版本 4.4.0 上正确使用 cv2.findContours()? 的相关文章

随机推荐