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 轮廓检测