opencv3.x版本cv2.findContours
时间: 2025-01-06 11:40:16 浏览: 6
### 关于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
```
阅读全文