【课题总结】OpenCV 抠图项目实战(8)图像轮廓

Python 小白的课题报告—OpenCV 抠图项目实战(8)

本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。
需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括了一个较为完整的 PyQt 项目。

欢迎关注『Python 小白的项目实战 @ youcans』 原创作品
Python 小白的课题报告—OpenCV 抠图项目实战(1)目录摘要
Python 小白的课题报告—OpenCV 抠图项目实战(2)抠图绪论
Python 小白的课题报告—OpenCV 抠图项目实战(3)抠图综述
Python 小白的课题报告—OpenCV 抠图项目实战(4)固定阈值抠图
Python 小白的课题报告—OpenCV 抠图项目实战(5)自适应阈值抠图
Python 小白的课题报告—OpenCV 抠图项目实战(6)色彩范围抠图
Python 小白的课题报告—OpenCV 抠图项目实战(7)边缘检测
Python 小白的课题报告—OpenCV 抠图项目实战(8)图像轮廓
Python 小白的课题报告—OpenCV 抠图项目实战(9)评价指标
Python 小白的课题报告—OpenCV 抠图项目实战(10)PyQt5 使用
Python 小白的课题报告—OpenCV 抠图项目实战(11)算法实验平台
Python 小白的课题报告—OpenCV 抠图项目实战(12)源程序代码


第四章 图像分割

4.2 提取轮廓特征

轮廓特征是图像中的重要特征。在进行视觉检测的时候,常常利用轮廓特征来达到我们要检测的目的。
轮廓即是以某种方式表示图像中的曲线的点的列表。
轮廓与边缘很相似。但轮廓是连续的,边缘不一定都连续。可以说边缘包括轮廓。边缘主要是作为图像的特征使用,比如用边缘特征可以区分脸和手;而轮廓主要用来分析物体的形态,比如物体的周长和面积等。轮廓常用于形状分析和物体的检测和识别。
寻找轮廓的操作一般用于二值化图,所以通常会使用阈值分割或 Canny 边缘检测先得到二值图。

OpenCV 中提供了函数cv.findContours()寻找轮廓,函数cv.drawContours() 绘制轮廓。在 OpenCV 中查找轮廓就像在黑色背景中找白色物体。

函数说明:
···
cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]] ) → contours, hierarchy
···
参数说明:

  • image:原始图像,8 位单通道二值图像
  • mode: 轮廓检索模式
    • cv.RETR_EXTERNAL:只检索最外层轮廓
    • cv.RETR_LIST:检索所有轮廓,不建立任何层次关系
    • cv.RETR_CCOMP:检索所有轮廓,并将其组织为两级层次结构
    • cv.RETR_TREE:检索所有轮廓,并重建嵌套轮廓的完整层次结构
    • cv.RETR_FLOODFILL:漫水填充法(泛洪填充)
  • method: 轮廓近似方法
    • cv.CHAIN_APPROX_NONE:存储每个轮廓的所有像素点
    • cv.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线段,仅保留其端点
    • cv.CHAIN_APPROX_TC89_L1:应用 Teh-Chin 链近似算法 L1
    • cv.CHAIN_APPROX_TC89_KCOS:应用 Teh-Chin 链近似算法 KCOS
  • contours:检测到的轮廓,列表,储存图像中所有轮廓,每个轮廓存储为点的向量
  • hierarchy:轮廓的层次结构,可选项,包含有关图像拓扑的信息
  • offset:每个轮廓点的偏移量,可选项,

使用 findContours()和cv.drawContours()查找、绘制轮廓的基本程序如下:

# MattingFindContours.py
# Find contour by OpenCV
# Copyright 2021 youcans, XUPT
# Crated:2021-12-10
import cv2 as cv
from matplotlib.figure import FigureimgOri = cv2.imread("../images/imgGaia.tif", flags=1)imgGray = cv2.cvtColor(imgOri, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgGray, 175, 255, cv2.THRESH_BINARY_INV)
# 寻找二值化图中的轮廓
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(imgOri.shape, image.shape)# 绘制轮廓
imgC = imgOri.copy()
contourPic = cv2.drawContours(imgC, contours, -1, (0, 0, 255), 2)plt.figure(figsize=(9, 6))
plt.subplot(131), plt.axis('off'), plt.title("Origin")
plt.imshow(cv2.cvtColor(imgOri, cv2.COLOR_BGR2RGB))
plt.subplot(132), plt.title("Threshold"), plt.axis('off')
plt.imshow(thresh, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.title("Contours"), plt.axis('off')
plt.imshow(cv2.cvtColor(contourPic, cv2.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()

使用findContours()提取轮廓特征的结果如下图所示。

在这里插入图片描述

图4.4 提取轮廓特征

4.3 图像分割

图像分割是抠图的理论基础。

图像分割是指根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。

基于阈值的分割方法,基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。因此,该类方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。

基于边缘的分割方法是基于灰度值的边缘检测。
基于区域的分割方法,是将图像按照相似性准则分成不同的区域,主要包括种子区域生长法、区域分裂合并法和分水岭法等几种类型。

【本节完】


版权声明:

欢迎关注『Python 小白的项目实战 @ youcans』 原创作品

原创作品,转载必须标注原文链接:https://blog.csdn.net/youcans/article/details/122372133

Copyright 2022 youcans, XUPT

Crated:2022-01-05


欢迎关注『Python 小白的项目实战 @ youcans』 原创作品
Python 小白的课题报告—OpenCV 抠图项目实战(1)目录摘要
Python 小白的课题报告—OpenCV 抠图项目实战(2)抠图绪论
Python 小白的课题报告—OpenCV 抠图项目实战(3)抠图综述
Python 小白的课题报告—OpenCV 抠图项目实战(4)固定阈值抠图
Python 小白的课题报告—OpenCV 抠图项目实战(5)自适应阈值抠图
Python 小白的课题报告—OpenCV 抠图项目实战(6)色彩范围抠图
Python 小白的课题报告—OpenCV 抠图项目实战(7)边缘检测
Python 小白的课题报告—OpenCV 抠图项目实战(8)图像轮廓
Python 小白的课题报告—OpenCV 抠图项目实战(9)评价指标
Python 小白的课题报告—OpenCV 抠图项目实战(10)PyQt5 使用
Python 小白的课题报告—OpenCV 抠图项目实战(11)算法实验平台
Python 小白的课题报告—OpenCV 抠图项目实战(12)源程序代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLServer 联合查询

联合查询分为内连接和外连接两个 一: 外连接又分为:左连接、右连接、完全外连接。 1. 左连接 left join或 left outer join SQL语句: select * from student left join course student .IDcourse.ID语句解说:左外连接包含left …

H5 五子棋小游戏

用H5实现双人五子棋小游戏。 功能分解: 棋盘的大小自己设置白色棋子和黑色棋子的点击事件有棋子的地方不能再次放棋子判断同色棋子是否够五个够五个之后弹框显示胜利 效果演示 原始样式 选择之后开始游戏 有没有一种特别好玩的感觉呢??…

【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用

Python 小白的课题报告—OpenCV 抠图项目实战(10)PyQt5 使用 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括了一个…

IDEA 生成get和set方法

使用IDEA自动生成get和set方法。 在IDEA中使用快捷键altinsert. 图解示例 要生成get和set的页面 使用altinsert快捷键 点击Getter and Setter 全部选中 点击ok之后get和set方法就自动生成了

【课题总结】OpenCV 抠图项目实战(11)算法实验平台

Python 小白的课题报告—OpenCV 抠图项目实战(11)抠图算法实验平台 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括…

IDEA 配置Tomcat

在IDEA上配置本地的Tomcat服务。 1.点击右上角如图红色圆圈圈中的Add Configuration… 2. 点击号 3. 向下查找Tomcat Server, 然后选择Local (如果没有Tomcat Server 点击33more items… 就能找到了) 4. 点击Local之后(我的是已经配置过的,如果没有配…

【课题总结】OpenCV 抠图项目实战(12)源程序代码

Python 小白的课题报告—OpenCV 抠图项目实战(12)源程序代码 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括了一个…

【OpenCV 例程200篇】67. 空间域图像增强的综合应用

【OpenCV 例程200篇】67. 空间域图像增强的综合应用 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 5. 空间域图像增强技术的综合应用 空间域图像增强的方法很多,各有不同的特点和…

Vue 双向绑定小案例

用Vue实现双向绑定的小案例。 **双向绑定:**使用了双向绑定的两个内容一定是完全一样,同时变化(同增同减) 效果图 原始样式 删除输入框内容上面显示的文本内容随之减少 在下面输入框输入内容上面显示的内容也会增加 **注意&…

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 1. 频率域图像滤波 图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制…

Vue 跑马灯

Vue 实现跑马灯的效果。 效果图 **功能讲解&#xff1a;**当点击开始按钮&#xff0c;跑马灯效果开始进行&#xff0c;文字滚动消失和显示&#xff0c;循环滚动&#xff0c;点击停止按钮&#xff0c;文字不再滚动&#xff0c;停留在当时显示的文字页面。 代码演示 <!DOC…

【OpenCV 例程200篇】69. 连续非周期信号的傅立叶系数

【OpenCV 例程200篇】69. 连续非周期信号的傅立叶系数 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 傅里叶变换 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留…

Python3.x字符串替换方法replace()、maketrans()和translate()

Python中replace()函数,类似于“查找与替换”功能 语法格式如下&#xff1a; str.replace(old, new[, max]) 其方法把字符串中的 old&#xff08;旧字符串&#xff09;&#xff0c;替换成 new(新字符串)&#xff0c;如果指定第三个参数max&#xff0c;则替换不超过 max 次&…

Vue 金额计算

使用Vue计算商品金额。 **功能分析&#xff1a;**输入商品单价和商品数量&#xff0c;设置固定的运费价格&#xff0c;直接会显示商品总价格。 效果演示 原始样式&#xff08;我设置的运费是10&#xff09; 输入商品单价和价格 代码演示 **注意&#xff1a;**引入Vue.js…

【OpenCV 例程200篇】70. 一维连续函数的傅里叶变换

【OpenCV 例程200篇】70. 一维连续函数的傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 2.1 傅里叶级数 傅里叶级数&#xff08;Fourier series&#xff09;在数论、组合数学、信号…

新版CSDN中如何快速转载别人的CSDN博客,详细方法与步骤!!!

前言 作为DSCN博客用户小萌新&#xff0c;有可能自己写的博客还不够好&#xff0c;或者当看到别人写的特别好的博客时&#xff0c;就想转载&#xff08;有些人可能会问&#xff1a;不是可以收藏吗&#xff1f;当然可以收藏&#xff0c;但是有些人也会想转载下载&#xff0c;不…

Vue 筛选

对数据进行筛选功能。 **功能分析&#xff1a;**当你输入一串文字时&#xff0c;以最快的速度筛选出相对应的内容&#xff0c;如果没有对应的内容则不予显示。 效果演示 原始样式 在输入框输入平板时筛选相应的内容 代码演示 **注意&#xff1a;**引入Vue.js架包 <!…

【OpenCV 例程200篇】71. 连续函数的取样

【OpenCV 例程200篇】71. 连续函数的取样 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 1.2 连续函数的取样 连续函数必须经过取样和量化转换为离散函数&#xff0c;才能用计算机进行处理。 …

第一个鸿蒙程序“hello world“

开发者文档: 开发者文档 运行环境要求 下载和安装DevEco Studio下载和安装Node.js 开始hello world 1.打开DevEco Studio&#xff0c;在欢迎页点击Create HarmonyOS Project&#xff0c;创建一个新工程。 2.选择设备类型和模板&#xff0c;以Wearable为例&#xff0c;选择Empty…

Vue 选项卡效果

用Vue实现选项卡效果。 效果演示 点击CSS 点击Vue 看起来是不是有点菜单导航的感觉&#xff0c;下面跟随我一起来一探究竟&#xff1f; 代码演示 **注意&#xff1a;**引入Vue.js架包 <!DOCTYPE html><html><head><meta charset"utf-8" /&…