图像轮廓的检测

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

'''
图像轮廓
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:压缩水平的,垂直和和谐的部分,也就是,函数只保留他们的终点部分
'''
posted @   努力的阿坤  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示