OpenCV-Python:轮廓

Posted 墨麟非攻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-Python:轮廓相关的知识,希望对你有一定的参考价值。

啥叫轮廓

轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。

轮廓与边缘很相似,但轮廓是连续的,边缘并不全都连续,其实边缘主要是作为图像的特征使用,比如用边缘特征可以区分脸和手,而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓。

寻找轮廓的操作一般用于二值化图,所以通常会使用阈值分割或Canny边缘检测先得到二值图。

 

寻找轮廓

import cv2
img = cv2.imread(\'handwriting.jpg\')

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 寻找二值化图中的轮廓
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))   # 结果是2
  • 参数2:轮廓的查找方式,一般使用cv2.RETR_TREE,表示提取所有轮廓并建立轮廓间的层级
  • 参数3:轮廓的近似方法,比如对于一条直线,我们可以存储该直线的所有像素点,也可以存储起点和终点,使用cv2.CHAIN_APPROX_SIMPLE就表示尽可能少的像素点表示轮廓

函数有3个返回值,image还是原来的二值化图片,hierarchy是轮廓间的层级关系,contours表示轮廓,以数组形式存储,记录了每条轮廓的所有像素点的坐标(x,y)

绘制轮廓 

ContourPicture = cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
cv2.imshow("ContourPicture", ContourPicture)
cv2.waitKey(0)

参数2就是得到contours,参数3表示要绘制那一条轮廓,-1表示绘制所有轮廓,参数4是颜色(B/G/R通道,所以(0,0,255)表示红色),参数5表示线宽。

 

总结

使用cv2.findContours()寻找轮廓,cv2.drawContours()绘制轮廓



 

以上是关于OpenCV-Python:轮廓的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-Python17.OpenCV的图像轮廓——轮廓特征

Opencv-python 找到图像轮廓并绘制,cv2.findContours()函数,求轮廓外接矩形,cv2.boundingrect()

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)

OpenCV-Python教程:19.轮廓属性