轮廓检测:

cv2.findContours(img,mode,method)

mode:轮廓检索模式
·RETR_EXTERNAL 只检测最外面的轮廓
·RETR_LIST 检索所有的轮廓,并将其保存到一条链表当中
·RETR_CCOMP 检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界
·RETR_TREE 检索所有的轮廓,并重构嵌套轮廓的整个层次
method:轮廓逼近方法
·CHAIN_APPROX_NONE 以Freeman链码的方式输出轮廓,所有其他方法使出多边形(顶点的序列)
·CHAIN_APPROX_SIMPLE 压缩水平的、垂直和斜的部分,也就是,函数只保留他们的终点部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#cv2.findContours(img,mode,method)
#***** 要一个通道 *****
'''

mode:轮廓检索模式
·RETR_EXTERNAL 只检测最外面的轮廓
·RETR_LIST 检索所有的轮廓,并将其保存到一条链表当中
·RETR_CCOMP 检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界
·RETR_TREE 检索所有的轮廓,并重构嵌套轮廓的整个层次
method:轮廓逼近方法
·CHAIN_APPROX_NONE 以Freeman链码的方式输出轮廓,所有其他方法使出多边形(顶点的序列)
·CHAIN_APPROX_SIMPLE 压缩水平的、垂直和斜的部分,也就是,函数只保留他们的终点部分

'''

import cv2
import numpy as np
#可以切
# thresh = cv2.imread("a28_thresh.png") ·thresh = cv2.imread("a28_thresh.png",cv2.IMREAD_GRAYSCALE)
# b,g,r = cv2.split(thresh)
# print((b.shape),(g.shape),(r.shape))

thresh = cv2.imread("test_thresh.png",cv2.IMREAD_GRAYSCALE)
#binary,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #2、4的版本没有binary的值
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #https://www.cnblogs.com/guobin-/p/10842486.html
# countours 保存的是图片轮廓信息
# hierarchy 保存的是层级

#绘制轮廓
draw_img = thresh.copy()
res = cv2.drawContours(draw_img,contours,-1,(255,0,0),2)
cv2.imshow('res',res)
cv2.waitKey(0)