#初始轮廓
#轮廓可以简单认为将连续的点连在一起的曲线,具有相同颜色和灰度,在形状分析和物体的检测识别很有用。
#使用函数cv2.findContours() cv2.drawContours()
import cv2
#import numpy as np
im = cv2.imread('test12.png')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)#转灰度图
ret, thresh = cv2.threshold(imgray, 127, 255, 0)#灰度图像二值化处理
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
#参数:输入图像 轮廓检索模式 轮廓近似方法 返回值:图像 轮廓(一个python的列表) 轮廓层析结构
#cv2.RETR_TREE:建立一个等级树结构的轮廓https://www.cnblogs.com/wmy-ncut/p/9889294.html
#cv2.CHAIN_APPROX_SIMPLE:他不会是轮廓完整的曲线,而只会表示他的几个点,如图二
#cv2.CHINA_APPROX_NONE:他会输出整个曲线,如图一
#注意:为了更加精确的找到轮廓:要使用二值化图像; 查找轮廓的函数会修改原始图像,要想还使用原始图像,要将原图存储; 另外查找轮廓就像是在黑色背景中找白色物体,所以要找的是白色而背景是黑
#这里可能会会报错,可以试试把openCV降级处理https://www.cnblogs.com/guobin-/p/10842486.html
img = cv2.drawContours(im, contours, -1, (0, 255, 0), 3)
#cv2.drawContours()绘制轮廓的函数参数:原始图像 轮廓(一个python列表) 轮廓的索引(当为-1时,会绘制全部轮廓) 颜色 厚度