OpenCV学习笔记16-轮廓

来源:互联网 发布:淘宝集市店怎么申请 编辑:程序博客网 时间:2024/05/29 19:40

1.什么是轮廓

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析物体检测识别中很有用。

  • 为了更加准确,要使用二值化图像。寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测
  • 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中
  • 查找轮廓就像在黑色背景中找白色物体。你应该记住,要找的物体是白色,背景是黑色。

2.查找轮廓

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

  • image:输入的二值化图像;
  • mode:轮廓检索模式;
    1.cv2.RETR_LIST:只是提取所有的轮廓,不去创建任何父子关系;
    2.cv2.RETR_EXTERNAL:只返回最外边的轮廓,忽略所有子轮廓;
    3.cv2.RETR_CCOMP:返回所有的轮廓并将轮廓分为两级组织结构;
    4.cv2.RETR_TREE:最完美的一个检索模式,返回所有轮廓,并且创建一个完整的组织结构列表。
  • method:轮廓近似方法;
    1.cv2.CHAIN_APPROX_NONE:存储所有边界点;
    2.cv2.CHAIN_APPROX_SIMPLE:去除轮廓上的冗余点,压缩轮廓,节省内存开支(例如轮廓为直线时,只需要存储两个端点即可)。
  • 返回值有三个:
    1.图像;
    2.轮廓:列表,存储图像中所有轮廓。每个轮廓是一个Numpy数组,包含对象边界点(x,y)的坐标;
    3.轮廓的层析结构:一个含有四个元素的数组。[Next,Previous,First_Child,Parent]

3.绘制轮廓

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image

  • image:原始图像;
  • contours:轮廓,是一个python列表;
  • contourIdx:轮廓的索引(绘制独立轮廓时很有用,设置为-1时绘制所有轮廓);
  • color:轮廓的颜色;
  • thickness:轮廓的厚度。

import numpy as npimport cv2img = cv2.imread('1.png')imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(imggray, 127, 255, 0)image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)#绘制所有轮廓img = cv2.drawContours(img, contours, -1, (0,255,0), 3)

原创粉丝点击