opencv 2与3 关于cv2.findContours 轮廓检测区别

关于opencv 轮廓检测 中的 ValueError: too many values to unpack ,ValueError: not enough values to unpack (expected 3, got 2)

Opencv2代码实现

contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  

函数原型

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  

返回两个值:contours;hierarchy。

Opencv3代码实现

image,cnts,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  

返回三个值:image;contours;hierarchy。

### 关于OpenCV 3.x 中 `cv2.findContours` 函数的用法 在 OpenCV 3.x 版本中,`findContours` 的返回值发生了变化。该函数用于检测二值图像中的轮廓并将其作为层次结构返回[^1]。 对于 Python 接口而言,在 OpenCV 3.x 及以上版本里,`cv2.findContours()` 返回三个对象而不是两个: ```python image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ``` 其中: - `contours`: 轮廓列表,每个元素都是表示单个轮廓坐标的 numpy 数组 - `hierarchy`: 层次结构数组,包含了各层轮廓之间的拓扑关系信息 需要注意的是,如果使用的是更新版的 OpenCV (比如4.x),则只返回后两者即 `(contours, hierarchy)`[^3]。 #### 示例代码展示如何提取绘制轮廓 下面是一个简单的例子来说明怎样利用此功能找到并显示图片上的所有轮廓: ```python import cv2 import numpy as np # 加载灰度图并做二值化操作 img_gray = cv2.imread('example.png',0) ret,thresh = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY) # 寻找轮廓 image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 绘制所有发现的轮廓到原图上 output_image = cv2.drawContours(cv2.cvtColor(img_gray,cv2.COLOR_GRAY2BGR), contours, -1, (0,255,0), 3) # 显示结果 cv2.imshow('Detected Contours', output_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 为了确保编译链接无误,当通过命令行方式编译C++项目时可以采用如下方法获取必要的库文件路径以及依赖项配置[^2]: ```bash g++ main.cpp $(pkg-config --cflags --libs opencv) -o my_program ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值