opencv findcontours用法
时间: 2023-05-31 22:19:25 浏览: 150
opencv轮廓(contour)检测
4星 · 用户满意度95%
### 回答1:
OpenCV 中的 findContours() 函数用于查找图像中的轮廓。它接受三个参数:
1. 原图像,必须是二值图像
2. 轮廓检索模式,可以是 cv2.RETR_EXTERNAL 或 cv2.RETR_LIST 等
3. 轮廓近似方法,可以是 cv2.CHAIN_APPROX_SIMPLE 或 cv2.CHAIN_APPROX_NONE 等
代码示例:
```
import cv2
img = cv2.imread("image.jpg", 0)
# 二值化
_, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 画出轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上面示例中,我们首先将原图像二值化,然后使用 findContours() 函数查找图像中的轮廓,最后使用 drawContours() 函数在图像中绘制轮廓。
### 回答2:
OpenCV是一个流行的计算机视觉库,它提供了许多强大的工具用于图像处理和计算机视觉应用开发。其中一个最常用的工具是findContours函数,这个函数可以用于在图像中查找所有的轮廓。在使用这个函数时,我们需要了解它的使用方法和一些关键点。接下来,我会详细讲解OpenCV中findContours函数的使用方法。
首先,我们需要明白轮廓是什么。轮廓可以理解为图像中所有连续的点的曲线。在OpenCV中,我们可以使用findContours函数查找图像中所有的轮廓。在使用findContours函数时,我们需要先将图像进行二值化,使得轮廓能够被轮廓识别算法准确找到。轮廓提取算法可以使用不同的算法,如Suzuki算法、Moore-Neighbor等。在OpenCV中,我们可以使用cv2.RETR_EXTERNAL参数告诉算法只查找最外层的轮廓。
下面是findContours函数的参数:
1. 输入参数:输入一张二值化的图像。
2. 轮廓查找方法:轮廓查找方法。
3. 轮廓逼近方法:轮廓逼近方法。
4. 偏移量:偏移量,一般为(0,0)。
输出参数:输出每一个轮廓的各个点坐标。
而这个函数最重要的是返回值,我们可以使用下面的代码将检测到的轮廓绘制到图像上:
contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
cv.drawContours(img, contours, -1, (0, 0, 255), 2)
其中,我们调用了cv.drawContours函数来将检测到的轮廓绘制在原输入图像上。
总之,OpenCV findContours函数是一个非常实用的工具,因为它可以帮助我们在图像中定位和提取出所有的轮廓。在使用这个函数时,我们需要明确轮廓是什么,并了解函数的参数和返回值。通过熟练掌握这个函数,在计算机视觉应用开发中,我们可以开发出更加强大和实用的应用,实现更加精准和高效的图像处理和分析。
### 回答3:
OpenCV是一个广泛使用的计算机视觉库,其中之一的函数是findContours()函数,用于在图像中查找和计算轮廓。
该函数的语法为:
contours, hierarchy = cv2.findContours(image, mode, method)
其中,image是输入图像,mode是轮廓检测模式,method是轮廓近似方法,返回的contours是包含图像中所有轮廓(即由点或线形成的封闭形状)的Numpy数组,hierarchy是轮廓的层次结构信息。
轮廓检测模式有以下四种:
- cv2.RETR_EXTERNAL:只检测外轮廓
- cv2.RETR_LIST:检测所有轮廓,但不建立层次体系
- cv2.RETR_CCOMP:检测所有轮廓,并将它们组织为两层,一层包含外轮廓,另一层包含内部轮廓
- cv2.RETR_TREE:检测所有轮廓并建立完整的轮廓层次体系
轮廓近似方法有以下三种:
- cv2.CHAIN_APPROX_NONE:存储所有的轮廓点
- cv2.CHAIN_APPROX_SIMPLE:只存储端点
- cv2.CHAIN_APPROX_TC89_L1或cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chinl链逼近算法中的一个,来自代码实现,更高效。
使用findContours()函数可以在许多计算机视觉任务中很有用,例如物体检测、场景重构和图像分割等。例如,在目标跟踪中,可以使用findContours()函数在当前帧中提取轮廓,并将其与模板轮廓匹配以确定目标位置。
阅读全文