OpenCV学习记录——轮廓检测

文章目录


前言

寻找目标图像的轮廓 并绘制出该轮廓是我们进行图像识别时常用的手段,轮廓是图像中连续的边界线 ,可以用于物体检测、形状分析等应用。为了获取更高的准确性 ,会先进行二值化处理,在得到二进制图像后,寻找轮廓就是从黑色背景中找到白色物体,因此我们要找的对象应是白色,背景应该是黑色。

一、寻找、绘制轮廓

(一)寻找图像轮廓

寻找图像轮廓函数如下:

python 复制代码
contours, hierarchy = cv2.findContours(img,mode,method)

其中的三个参数分别为:

(1)"img", 要寻找轮廓的图像

(2)"mode", 代表轮廓的检测模式,具体取值范围如下表:

|-----------------------|----------------------------|
| 取值 | 含义 |
| cv.2RETR_EXTERNAL = 0 | 只检测最外面的轮廓 |
| cv2.RETR_LIST = 1 | 检测所有轮廓,不建立等级关系,所有轮廓放在一个列表中 |
| cv2.RETR_CCOMP = 2 | 检索所有的轮廓,并将它们组织为两层 |
| cv2.RETR_TREE = 3 | 按照树形存储轮廓,从右到左一层一层检测 |

(3)"method", 代表近似查找轮廓的方法,具体取值范围如下:

|-------------------------|---------------------------------------------------|
| 取值 | 含义 |
| cv2.CHAIN_APPROX_NONE | 保存所有轮廓上的点 |
| cv2.CHAIN_APPROX_SIMPLE | 压缩水平的、垂直的、斜的部分,即只保留他们的角点坐标,例如一个矩形轮廓只需 4 个点来保存轮廓信息 |

此外,寻找轮廓函数还有两个返回值,具体如下:

(1)"contours",是一个列表,包含检测到的轮廓。每个轮廓都是一个由点组成的数组,而这个返回值也是绘制轮廓时最重要的参数

(2)"hierarchy ", 是一个包含轮廓层级关系的数组,即轮廓与轮廓之间的层级关系。每个轮廓的层级关系由四个整数值表示:[next, previous, first child, parent],不同的层级都有不同的索引,相当于编号

(二)绘制图像轮廓

绘制图像轮廓函数如下:

python 复制代码
cv2.drawContours(image, contours, contourIdx, color, thickness)

其中五个参数分别为:

(1)"image", 要在其上绘制轮廓的图像

(2)"contours" , 要绘制的轮廓,通常是通过 cv2.findContours 函数获得的轮廓列表

(3)"contourIdx", 要绘制的轮廓的索引。如果为负数,则绘制所有的轮廓

(4)"color", 绘制轮廓的颜色,可以是一个三元组 (B, G, R) 表示的颜色值

(5)"thickness" , 绘制轮廓的线条粗细。如果为负数或 cv2.FILLED,则填充轮廓内部

二、具体应用代码

寻找、绘制图像轮廓的具体代码如下:

python 复制代码
import cv2

img = cv2.imread('KAI.jpg')

# 图像二值化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)

# 寻找、绘制轮廓
contours, hierarchy = cv2.findContours(img2, 3, cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContours(img, contours, -1, (0,255,0), 2)

# 显示图像
cv2.imshow("image", img)
cv2.waitKey(0)    
cv2.destroyAllWindows()
相关推荐
艾莉丝努力练剑5 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
MobotStone5 小时前
数字沟通之道
人工智能·算法
Together_CZ5 小时前
Cambrian-S: Towards Spatial Supersensing in Video——迈向视频中的空间超感知
人工智能·机器学习·音视频·spatial·cambrian-s·迈向视频中的空间超感知·supersensing
YJlio6 小时前
ShareEnum 学习笔记(9.5):内网共享体检——开放共享、匿名访问与权限风险
大数据·笔记·学习
雲烟6 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
caiyueloveclamp6 小时前
【功能介绍05】ChatPPT好不好用?如何用?用户操作手册来啦!——【AI辅写+分享篇】
人工智能·powerpoint·ai生成ppt·aippt·免费aippt
泽虞6 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
Aileen_0v06 小时前
【Gemini3.0的国内use教程】
android·人工智能·算法·开源·mariadb
xiaogutou11216 小时前
5款软件,让歌唱比赛海报设计更简单
人工智能
brave and determined6 小时前
接口通讯学习(day05):智能手机的内部高速公路:揭秘MIPI CSI与DSI技术
学习·智能手机·软件工程·制造·csi·mipi·dsi