findContours参数
时间: 2023-10-24 18:30:33 浏览: 80
cv2.findcontours参数包括:
1. image:输入图像,必须为二值图像,即黑白图像。
2. mode:轮廓检索模式,有四种模式可选:
- cv2.RETR_EXTERNAL:只检索最外层轮廓。
- cv2.RETR_LIST:检索所有轮廓,不建立轮廓间的父子关系。
- cv2.RETR_CCOMP:检索所有轮廓,建立两层轮廓间的父子关系。
- cv2.RETR_TREE:检索所有轮廓,建立完整的轮廓层级结构。
3. method:轮廓逼近方法,有三种方法可选:
- cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
- cv2.CHAIN_APPROX_SIMPLE:仅存储轮廓的端点。
- cv2.CHAIN_APPROX_TC89_L1、cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链逼近算法。
4. contours:检测到的轮廓,每个轮廓由一组点组成。
5. hierarchy:轮廓的层级结构,每个轮廓对应一个四元组(hierarchy[i][], hierarchy[i][1], hierarchy[i][2], hierarchy[i][3]),其中hierarchy[i][]、hierarchy[i][1]、hierarchy[i][2]、hierarchy[i][3]分别表示当前轮廓的后一个轮廓、前一个轮廓、第一个子轮廓和父轮廓的索引。如果当前轮廓没有对应的后一个、前一个、子轮廓或父轮廓,则相应的索引值为-1。
相关问题
findContours 参数
findContours是OpenCV中的一个函数,用于在二进制图像中查找轮廓,该函数的参数如下:
1. image:输入图像,需要为二进制图像,即只包含0和255两个像素值。
2. contours:输出参数,存储轮廓信息,为一个向量(vector)类型的变量。
3. hierarchy:输出参数,存储轮廓的层级信息,为一个向量(vector)类型的变量。
4. mode:表示轮廓检索模式。有四种模式可选:
- cv2.RETR_EXTERNAL:表示只检测外部轮廓;
- cv2.RETR_LIST:检测所有轮廓,并将其保存到列表中;
- cv2.RETR_CCOMP:检测所有轮廓,并将其组织为两层结构(上层为物体的外边界,下层为物体内部空洞的边界);
- cv2.RETR_TREE:检测所有轮廓,并重构轮廓之间的嵌套层次。
5. method:表示轮廓的逼近方法。有三种方法可选:
- cv2.CHAIN_APPROX_NONE:存储所有的轮廓点,对每个轮廓点都进行存储;
- cv2.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线方向的元素,并仅保留端点,例如一个矩形轮廓只需存储4个点信息;
- cv2.CHAIN_APPROX_TC89_L1和cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链逼近算法中的一种,可以选择更优化的逼近方法。
6. offset:可选参数,表示轮廓点坐标的偏移量。
Imgproc.findContours 参数
OpenCV 中的 `findContours` 函数用于在二值图像中查找轮廓。它的函数原型如下:
```python
contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
```
其中,参数含义如下:
- `image`:输入二值图像;
- `mode`:轮廓检索模式,有以下几种选项:
- `cv.RETR_EXTERNAL`:只检索最外层的轮廓;
- `cv.RETR_LIST`:检索所有的轮廓,并将其保存到列表中;
- `cv.RETR_CCOMP`:检索所有轮廓,并将其组织成两层的层次结构;
- `cv.RETR_TREE`:检索所有轮廓,并将其组织成完整的层次结构;
- `method`:轮廓逼近方法,有以下几种选项:
- `cv.CHAIN_APPROX_NONE`:存储所有的轮廓点;
- `cv.CHAIN_APPROX_SIMPLE`:仅存储轮廓的端点;
- `cv.CHAIN_APPROX_TC89_L1`:使用 Teh-Chin 链逼近算法;
- `cv.CHAIN_APPROX_TC89_KCOS`:使用 Teh-Chin 链逼近算法,并使用 Kohli-Chen 角点检测算法;
- `contours`:输出参数,保存检测到的轮廓;
- `hierarchy`:输出参数,保存轮廓的层次结构信息;
- `offset`:可选参数,轮廓偏移量。
例如,以下代码可以在二值图像中查找轮廓并绘制出来:
```python
import cv2 as cv
img = cv.imread('image.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(img, contours, -1, (0, 0, 255), 2)
cv.imshow('Contours', img)
cv.waitKey(0)
```
阅读全文