OpenCV-Python:轮廓

啥叫轮廓

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

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

寻找轮廓的操做通常用于二值化图,因此一般会使用阈值分割或Canny边缘检测先获得二值图。spa

 

寻找轮廓

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)code

绘制轮廓 

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表示线宽。blog

 

总结

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

相关文章
相关标签/搜索