当前位置: 首页 > news >正文

OpenCV学习记录——轮廓检测

文章目录

  • 前言
  • 一、寻找、绘制轮廓
  • 二、具体应用代码

前言

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

一、寻找、绘制轮廓

(一)寻找图像轮廓

寻找图像轮廓函数如下:

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],不同的层级都有不同的索引,相当于编号

(二)绘制图像轮廓

绘制图像轮廓函数如下:

cv2.drawContours(image, contours, contourIdx, color, thickness)

其中五个参数分别为:

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

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

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

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

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

二、具体应用代码

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

import cv2img = 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()
http://www.lryc.cn/news/292996.html

相关文章:

  • FreeRTOS任务挂起以及延时部分源码分析
  • oracle数据库慢查询SQL
  • C语言搭配EasyX实现贪吃蛇小游戏
  • # 软件安装-Linux搭建nginx(单机版)
  • 成熟的汽车制造供应商协同平台 要具备哪些功能特性?
  • React16源码: React中处理ref的核心流程源码实现
  • ref和reactive
  • 掌握数据预测的艺术:线性回归模型详解
  • STM32F407移植OpenHarmony笔记8
  • C++:输入流/输出流
  • 十、Qt三维图表
  • CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard
  • 【leetcode】完全背包总结
  • 【Linux】理解系统中一个被打开的文件
  • k8s kubeadm部署安装详解
  • RT-DETR算法优化改进: 下采样系列 | 一种新颖的基于 Haar 小波的下采样HWD,有效涨点系列
  • CocosCreator3.8源码分析
  • (已解决)spingboot 后端发送QQ邮箱验证码
  • 【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题
  • 2024牛客寒假算法基础集训营1
  • 元素的显示与隐藏,精灵图,字体图标,CSSC三角
  • 最新!2024顶级SCI优化!TTAO-CNN-BiGRU-MSA三角拓扑聚合优化、双向GRU融合注意力的多变量回归预测程序!
  • Flink SQL Client 安装各类 Connector、组件的方法汇总(持续更新中....)
  • React18-模拟列表数据实现基础表格功能
  • MySQL查询数据(十)
  • AJAX-常用请求方法和数据提交
  • 2024美国大学生数学建模竞赛美赛B题matlab代码解析
  • 【DouYing Desktop】
  • 正则表达式与文本处理工具
  • IDEA中的Run Dashboard