import cv2
import matplotlib.pyplot as plt
image = cv2.imread("qqhuman.jpeg")
image_BGR = image.copy()
# 将图像转换成灰度图像,并执行图像高斯模糊,以及转化成二值图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5,5), 0)
image_binary = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]
# 从二值图像中提取轮廓
# contours中包含检测到的所有轮廓,以及每个轮廓的坐标点
contours = cv2.findContours(image_binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
# 遍历检测到的所有轮廓,并将检测到的坐标点画在图像上
# c的类型numpy.ndarray,维度(num, 1, 2), num表示有多少个坐标点
for c in contours:
cv2.drawContours(image, [c], -1, (255, 0, 0), 2)
image_contours = image
#将图片用matplotlib的方式展现出来
# display BGR image
plt.subplot(1, 3, 1) #确定一个一行三列的画布,将图片放在第一个位置
plt.imshow(image_BGR)
plt.axis('off')
plt.title('image_BGR')
# display binary image
plt.subplot(1, 3, 2)
plt.imshow(image_binary, cmap='gray')
plt.axis('off')
plt.title('image_binary')
# display contours
plt.subplot(1, 3, 3)
plt.imshow(image_contours)
plt.axis('off')
plt.title('{} contours'.format(len(contours)))
plt.show()
'''标签:plt,检测,image,cv2,contours,图像,轮廓 From: https://www.cnblogs.com/kun-sir/p/16735600.html
图像轮廓
cv2.findContours(img,mode,method) #img输出当前的图像,mode当前的模式,method当前的方式
mode:轮廓检索模式
RETR_EXTERNEL:只检索最外面的轮廓
RETR_LIST:检索所有的轮廓,并将其保存在一条链表上
RETR_CCOMP:检索所有轮廓,并将他们组织为两层;顶层是各部分的外部界面,第二层是空洞的边界
RETR_TREE:检索所有轮廓,并重构嵌套轮廓的整个层次
method:轮廓逼近的方法
CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点序列)
CHAIN_APPROX_SIMPLE:压缩水平的,垂直和和谐的部分,也就是,函数只保留他们的终点部分
'''