day5 - 利用阈值勾勒

这篇具有很好参考价值的文章主要介绍了day5 - 利用阈值勾勒。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阈值处理在计算机视觉技术中占有十分重要的位置,他是很多高级算法的底层逻辑之一。本实验将练习使用图像阈值处理技术来处理不同的情况的图像,并获得图像轮廓。

完成本期内容,你可以:

  • 了解图像阈值处理技术的定义和作用

  • 掌握各阈值处理技术的原理

  • 了解自适应阈值处理的使用场景

  • 学会选择合适的阈值处理方式

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码文章来源地址https://www.toymoban.com/news/detail-461284.html


图像阈值处理函数

在图像处理过程中,阈值使得图像的像素值更单一,进而使得图像的效果更简单。首先把一幅彩色图像转换为灰度图像,这样图像的像素值的取值范围即可简化为0~255,然后通过阈值使用转换后的灰度图像呈现出只有黑色和宝白色的视觉效果。例如,当阈值为127时,把小于127的所有像素值都转换为0(即纯黑色),把大于127的像素值都转换为255(即纯白色),虽然会丢失一些灰度细节,但是会更明显的保留灰度图像主体的轮廓。

OpenCV中提供的对图像进行阈值处理的函数是cv2.threshold()。

函数原型: retval,dst = cv2.threshold(src, thresh, maxval, type);

retval为处理时所采用的阈值。

dst为转换后的图像。

参数描述如下:

参数 描述
src 原始图像
thresh 阈值,阈值在125~150范围内取值的效果最好
maxval 阈值处理采用的最大值
type 阈值处理类型

阈值处理类型,如下:

类型 含义
cv2.THRESH_BINARY 二值化
cv2.THRESH_BINARY_INV 反二值化阈值处理
cv2.THRESH_TOZERO 低于阈值零处理
cv2.THRESH_TOZERO_INV 超出阈值零处理
cv2.THRESH_TRUNC 截断阈值处理

二值化处理

“非黑即白”的图像

二值化处理会将灰度图像的像素值两极分化,使得灰度图像呈现出只有纯黑色和纯白色的视觉效果。经过阈值处理后的图像轮廓分明、对比明显,因此二值化处理常用于图像识别。

if 像素值 <= 阈值: 
    像素值 = 0
if 像素值 > 阈值: 
    像素值 = 最大值
反二值化处理

反二值化处理也叫反二值化阈值处理,其结果为二值化处理的相反的结果。将大于阈值的像素值变为0,将小于或等于阈值的像素值变为最大值。原图中白色的部分会变成黑色,黑色的部分会变成白色。

if 像素值 <= 阈值: 
    像素值 = 像素值
if 像素值 > 阈值: 
    像素值 = 0

零处理

零处理会将某一个范围内的像素值变为0,并允许范围之外的像素保留原值。零处理包括低于阈值零处理和超出阈值零处理。

低于阈值零处理

低于阈值进行零处理也叫零阈值零处理,该处理会将低于或等于阈值的像素值变为0,大于阈值的像素值保持原值。

if 像素值 <= 阈值: 
    像素值 = 0
if 像素值 > 阈值: 
    像素值 = 原值
超出阈值零处理

超出阈值进行零处理也叫超阈值零处理,该处理会将大于阈值的像素值变为0,小于或等于阈值的像素值保持原值。

if 像素值 <= 阈值: 
    像素值 = 原值
if 像素值 > 阈值: 
    像素值 = 0

截断处理

截断处理也叫截断阈值处理,该处理会将图像中大于阈值的像素值变为和阈值一样的值,小于或等于阈值的像素保持原值。

if 像素值 <= 阈值: 
    像素值 = 原值
if 像素值 > 阈值: 
    像素值 = 阈值

自适应处理

OpenCV提供了一种改进的阈值处理技术:图像中不同区域使用不同的阈值,把这种改进的阈值处理技术称作自适应阈值处理,自适应阈值是根据图像中某一正方形区域内的所有像素值按照指定的算法计算得到的。与上文讲解的5中阈值处理类型相比,自适应阈值处理能更好地处理明暗分布不均的图像,获得更简单的图像。

if 像素值 <= 阈值: 
    像素值 = 原值
if 像素值 > 阈值: 
    像素值 = 阈值

OpenCV中提供的对图像进行自适应阈值处理的函数是cv2.adaptiveThreshold()。

函数原型: dst = cv2.adaptiveThreshold(src,maxValue,adaptiveMethod, threshholdType, blockSize, C);

dst为转换后的图像。

参数描述如下:

参数 描述
src 需要被处理的图像,该图像须是灰度图像
maxValue 阈值处理采用的最大值
threshholdType 阈值处理类型;需要注意的是,阈值处理类型必须是cv2.THRESH_BINARY或者cv2.THRESH_BINARY_INV中的一个。
blockSize 一个正方形区域的大小。
C 常量。阈值等于均值或者加权值减去这个常量
adaptiveMethod 自适应阈值的计算方法。

自适应阈值的计算方法,如下:

类型 含义
cv2.ADAPTIVE_THRESH_MEAN_C 对一个正方形区域内的所有像素平均加权
cv2.ADAPTIVE_THRESH_GAUSSIAN_C 根据高斯函数按照像素与中心点的距离对一个正方形区域内的所有像素进行加权计算

Otsu方法

对于有些图像,当主观去设置阈值时,可能得到的效果并不好,这时就需要一个个的去尝试,知道找到最合适的阈值。逐个寻找最合适的阈值不仅工作量大,而且效率低。为此。OpenCV提供了Otsu方法,Otsu方法能够遍历所有可能的阈值,从中找到最合适的阈值。Otsu方法的语法和threshold()方法的语法基本一致。只不过在为type传递参数时,要多传递一个参数,cv2.THRESH_OTSU的作用是实现Otsu方法的阈值处理。

OpenCV中提供的对图像进行Otsu的函数是cv2.threshold()。

函数原型:retval,dst = cv2.threshold(src, thresh, maxval, type);

retval为处理时所采用的阈值。

dst为转换后的图像。

参数描述如下:

参数 描述
src 原始图像
thresh 阈值,阈值在125~150范围内取值的效果最好
maxval 阈值处理采用的最大值
type 阈值处理类型

阈值处理类型,如下:

类型 含义
cv2.THRESH_BINARY 二值化
cv2.THRESH_BINARY_INV 反二值化阈值处理
cv2.THRESH_TOZERO 低于阈值零处理
cv2.THRESH_TOZERO_INV 超出阈值零处理
cv2.THRESH_TRUNC 截断阈值处理

具体步骤

1. 创建项目结构

创建项目名为利用阈值勾勒建筑轮廓,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

利用阈值勾勒建筑轮廓                      # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 利用二值化阈值处理勾勒别墅轮廓图

  1. code文件夹下创建binary.py
  2. 读取dataset文件夹下的villa.png图片,并进行展示 ;
  3. 将图片进行二值化处理,并进行展示,标题为BINARY
  4. 将图片进行反二值化处理,并进行展示,标题为BINARY_INV
  5. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread("../dataset/villa.png")
# 转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化阈值处理
t1, dst1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 反二值化阈值处理
t2, dst2 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("img", img)  # 显示图像
cv2.imshow("BINARY", dst1)
cv2.imshow("BINARY_INV", dst2)
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

day5 - 利用阈值勾勒

实验效果

3. 利用Otsu方法勾勒图像轮廓

  1. code文件夹下创建otsu.py
  2. 读取dataset文件夹下的tower.png图片,并进行展示 ;
  3. 将图片进行二值化处理,并进行展示,标题为BINARY
  4. 将图片进行Otsu处理,并进行展示,标题为Otsu
  5. 在图像上显示最合适的阈值;
  6. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2

# 读取图片
image = cv2.imread("../dataset/tower.png")

# 步骤一: 对图像进行二值化处理
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #转换为灰度图
t1, dst1 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY) # 二值化阈值处理

# 步骤二: 实现Otsu方法的阈值处理
t2, dst2 = cv2.threshold(image_Gray, 0, 255, cv2.THRESH_BINARY  + cv2.THRESH_OTSU)
cv2.putText(dst2, "best threshold: " + str(t2), (0, 30),
         cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2) # 在图像上绘制最合适的阈值


cv2.imshow("img", image) # 显示原始图像图像
cv2.imshow("BINARY", dst1) # 显示二值化阈值处理的图像
cv2.imshow("OTSU", dst2) # 显示实现Otsu方法的阈值处理
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 销毁所有窗口

day5 - 利用阈值勾勒

实验效果

阈值处理在计算机视觉 技术中占有十分重要的位置,他是很多高级算法的底层逻辑之一。因为二值图像会忽略细节,放大特征,而很多高级算法要根据物体的轮廓来分析物体的特征,所以二值图像非常适合做复杂的识别运算,在进行识别运算之前,应先将图像转为灰度图像,再进行二值化阈值处理,这样就得到了算法所需要的物体(大致)轮廓图像。

点击下载源码

到了这里,关于day5 - 利用阈值勾勒的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [通用]计算机经典面试题基础篇Day3

    1、请说明mysql的两种主要引擎 MySQL有多种存储引擎,但最常见的两种主要引擎是InnoDB和MyISAM。 2、说一下mysql这两种引擎的使用场景 MySQL的两种主要引擎,InnoDB和MyISAM,各自适用于不同的使用场景,以下是它们的主要用途和适合的应用场景: InnoDB引擎: 事务支持:InnoDB是MyS

    2024年02月09日
    浏览(38)
  • 计算机视觉:利用RANSAC算法优化关键点匹配

    随机抽样一致算法(RANdom SAmple Consensus,RANSAC),采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。RANSAC算法被广泛应用在计算机视觉领域和数学领域,例如直线拟合、平面拟合、计算图像或点云间的变换矩阵、计算基础矩阵等方面。     RANSAC算法假

    2024年02月06日
    浏览(56)
  • [持续更新]计算机经典面试题基础篇Day2

    1、单例模式是什么,线程安全吗 单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供全局访问点。通过使用单例模式,可以避免多次创建相同的对象,节省内存资源,同时也可以确保对象的一致性。 在Java中,常见的实现单例模式的方式是使用懒汉式和饿汉式。

    2024年02月09日
    浏览(42)
  • 模型剪枝:如何利用剪枝技术提高计算机视觉模型的准确性

    作者:禅与计算机程序设计艺术 模型剪枝(pruning)是一种技术,它通过删除不重要的权重参数,从而减少神经网络中的参数数量,并保持其准确率,同时降低计算量、占用内存空间。这个过程称之为模型压缩(compression)。 模型剪枝的目的是为了改善神经网络在实际环境下

    2024年02月07日
    浏览(43)
  • 【计算机视觉】如何利用 CLIP 做简单的人脸任务?(含源代码)

    CELEBA 数据集( CelebFaces Attributes Dataset )是一个大规模的人脸图像数据集,旨在用于训练和评估人脸相关的计算机视觉模型。该数据集由众多名人的脸部图像组成,提供了丰富的人脸属性标注信息。 以下是 CELEBA 数据集的一些详细信息: 规模: CELEBA 数据集包含超过 20 万张名

    2024年02月04日
    浏览(54)
  • 浅学Linux之旅 day1 学习路线及计算机入门知识介绍

    我不要做静等被掀起的轻波,我要生起翠绿的斑驳 偶尔过季的遭遭人事化长风拂过 思绪撕碎点燃了火                         ——24.1.14 ①计算机入门知识介绍 ②Linux系统概述 ③Linux系统的安装和体验 ④Linux的网络配置和连接工具 ⑤Linux的目录结构 ⑥Linux的常用命令

    2024年01月19日
    浏览(46)
  • 计算机网络课程 day1 基本概念-交换机-路由器 计算机网络的参考模型

    目录 学习计算机网络课程的目标和意义:  计算机网络的基本概念 常用网络设备: network device 交换机:组建局域网使用的,将很多电脑连接起来,组成一个局域网络,可以一起打游戏/上网 路由器:实现跨网段通信使用,把网络里的数据从一个地方转发到另一个地方。可以

    2024年02月13日
    浏览(60)
  • 计算机视觉——图像处理基础

    随着计算机视觉的不断发展,图像的预处理成为分析图像的必然前提,本文就介绍图像处理的基础内容。 图像中,高频部分是图像中像素值落差很大的部分,如图像边缘,该部分的有用信息经常被噪声淹没。降低高频段的噪声是设计图像滤波器的关键。 图像滤波器就是一个

    2024年01月19日
    浏览(62)
  • 【计算机视觉】如何利用 CLIP 做简单的图像分类任务?(含源代码)

    要使用 CLIP 模型进行预测,您可以按照以下步骤进行操作: 安装依赖:首先,您需要安装相应的依赖项。您可以使用 Python 包管理器(如 pip )安装 OpenAI 的 CLIP 库。 导入所需的库,包括 clip (用于加载和使用 CLIP 模型)、 torch ( PyTorch 框架)和 PIL (用于图像处理)。 设置

    2024年02月16日
    浏览(47)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包