cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图), # cv2.RETR_EXTERNAL只检测外轮廓(内没用,我需要得到他的外接矩形), # cv2.CHAIN_APPROX_SIMPLE只保留终点坐标 # 返回的list中每个元素都是图像中的一个轮廓(其他的不要) refCnts, hierarchy = cv2.findContours(ref, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 只检测外轮廓,保留坐标点
时间: 2024-04-15 07:31:08 浏览: 6
`cv2.findContours()`函数用于在二值图像中查找轮廓。它接受三个参数:输入图像、轮廓检索模式和轮廓近似方法。
- 输入图像应为二值图像,即只有黑色和白色两种颜色。
- 轮廓检索模式决定了要提取的轮廓类型。在这里,我们使用`cv2.RETR_EXTERNAL`,它只检测外部轮廓,而不考虑内部轮廓。
- 轮廓近似方法决定了如何存储轮廓的坐标点。在这里,我们使用`cv2.CHAIN_APPROX_SIMPLE`,它只保留终点坐标,以节省内存。
函数返回一个包含轮廓的列表`refCnts`和一个包含轮廓之间关系的层次结构`hierarchy`。在这里,我们只关心外部轮廓,所以只使用了`refCnts`。列表中的每个元素都是图像中的一个轮廓,可以通过遍历列表来获取每个轮廓。
根据你的代码示例,`ref`是一个二值图像,您希望得到每个轮廓的外接矩形。可以通过使用`cv2.boundingRect()`函数来计算每个轮廓的外接矩形。例如:
```python
for contour in refCnts:
x, y, w, h = cv2.boundingRect(contour)
# 在图像上绘制外接矩形
cv2.rectangle(ref, (x, y), (x+w, y+h), (0, 255, 0), 2)
```
这样,您可以在原始图像上绘制出每个轮廓的外接矩形。
相关问题
cv2.findContours()函数中的mode参数都有什么? A cv2.RETR_LIST B cv2.RETR_EXTERNAL C cv2.RETR_CCOMP D cv2.RETR_TREE
cv2.findContours()函数中的mode参数有四种,分别是:
A. cv2.RETR_LIST:表示提取所有轮廓,不建立轮廓间的父子关系;
B. cv2.RETR_EXTERNAL:表示只提取最外层的轮廓,所有的子轮廓都不考虑;
C. cv2.RETR_CCOMP:表示提取所有轮廓,并将轮廓分为两级,即外层轮廓和内层轮廓;
D. cv2.RETR_TREE:表示提取所有轮廓,并重构轮廓之间的父子关系。
red_contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) blue_contours, _ = cv2.findContours(blue_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) green_contours, _ = cv2.findContours(green_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) yellow_contours, _ = cv2.findContours(yellow_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
这段代码使用OpenCV库的`findContours`函数来检测每个颜色掩码中的轮廓。以下是代码示例:
```python
import cv2
red_contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
blue_contours, _ = cv2.findContours(blue_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
green_contours, _ = cv2.findContours(green_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
yellow_contours, _ = cv2.findContours(yellow_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
在这个例子中,`findContours`函数接受三个参数:输入的二值图像、轮廓检索模式和轮廓近似方法。对于每个颜色掩码,我们分别使用`RETR_EXTERNAL`模式来检测外部轮廓,并使用`CHAIN_APPROX_SIMPLE`方法进行简单的轮廓近似。函数返回两个值,第一个是轮廓列表(在这里我们将其赋值给`red_contours`、`blue_contours`、`green_contours`和`yellow_contours`),第二个是层次结构(在这里我们使用下划线表示我们不关心它)。这样,你可以使用这些轮廓列表来进一步处理和分析检测到的颜色区域。