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

图像阈值化

图像阈值化

图像阈值化简介

⚫ 图像阈值化是图像处理的重要基础部分, 应用很广泛, 可以根据灰度差异来分割图像不同部分

⚫ 阈值化处理的图像一般为单通道图像(灰度图)

⚫ 阈值化参数的设置可以使用滑动条来debug

⚫ 阈值化处理易光照影响, 处理时应注意

⚫ 本节主要介绍的图像阈值化函数方法:

固定阈值:cv2.threshold()

自适应阈值:cv2.adaptiveThreshold()
在这里插入图片描述

1)固定阈值—cv2.threshold()

给定阈值进行阈值操作得到二值图(0, 1两类值), 可以过滤灰度值过大或过小的点
函数原型:
在这里插入图片描述
⚫ src: 单通道图像(灰度图或二值图)
⚫ dst: 输出图像要求和src一样的尺寸和类型
⚫ thresh: 给定的阈值
⚫ maxval: 第五个参数设置为CV_THRESH_BINARY或
CV_THRESH_BINARY_INV 阈值类型的最大值
第五个参数阈值类型取值如下:
CV2.THRESH BINARY
CV2.THRESH BINARY INV
CV2.THRESH TRUNC
CV2.THRESH TOZERO
CV2.THRESH TOZERO INV
在这里插入图片描述

eXI
gray= cv2 .cvtColor(img,  cv2.COLOR_BGR2GRAY)
threshold= cv2.threshold(gray,100255, cv2.THRESH_BINARY)

在这里插入图片描述

2)自适应阈值—cv2.adaptiveThreshold()

对矩阵采用自适应阈值操作, 自适应阈值是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.

函数原型:
在这里插入图片描述
⚫ src: 单通道图像(灰度图或二值图)
⚫ dst: 输出图像要求和src一样的尺寸和类型
⚫ maxValue:使用cv2.THRESH_BINARY和 cv2.THRESH_BINARY_INV 的最大值
⚫ adaptiveMethod: 指定自适应阈值算法, 可取值为cv2.ADAPTIVE_THRESH_MEAN_C 或 cv2.ADAPTIVE_THRESH_GAUSSIAN_C
⚫ thresholdType: 取阈值类型取值必须为cv2.THRESH_BINARY 、 cv2.THRESH_BINARY_INV二者之一
⚫ blockSize: 用来计算阈值的邻域大小3, 5, 7,…
⚫ C: 减去平均或加权平均后的常数值
函数 adaptiveThreshold 将灰度图像变换到二值图像,采用下面公式:
在这里插入图片描述
其中T(x, y)为分别计算每个单独像素的阈值, 取值如下:

对方法 cv2.ADAPTIVE_THRESH_MEAN_C, 先求出块中的均值,再减掉C

对方法 cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 先求出块中的加权和(gaussian), 再减掉C

thres = cv2.adaptiveThreshold(gray,255,CV2.ADAPTIVE_THRESH_MEAN CCV2 .THRESH BINARY,112)
thres2 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,CV2 .\cv2.THRESH_BINARY,11,2)

在这里插入图片描述

3)Otsu阈值化

在使用全局阈值时,我们就是随便给了一个数来做阈值,那我们怎么知道我们选取的这个数的好坏呢?答案就是不停的尝试。如果是一副双峰图像(简单来说双峰图像是指图像直方图中存在两个峰)呢?我们岂不是应该在两个峰之间的峰谷选一个值作为阈值?这就是 Otsu 二值化要做的。简单来说就是对一副双峰图像自动根据其直方图计算出一个阈值。(对于非双峰图像,这种方法得到的结果可能会不理想)

这里用到到的函数还是 cv2.threshold(),但是需要多传入一个参数(flag): cv2.THRESH_OTSU。这时要把阈值设为 0。然后算法会找到最优阈值,这个最优阈值就是返回值 retVal。如果不使用 Otsu 二值化,返回的retVal 值与设定的阈值相等.
在这里插入图片描述

img = cv2 .GaussianBlur (img, (5,5)0)
gray = cv2 .cvtColor(img,  cv2.COLOR_BGR2GRAY)
ret3,th3 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH OTSU)

在这里插入图片描述

相关文章:

图像阈值化

图像阈值化 图像阈值化简介 ⚫ 图像阈值化是图像处理的重要基础部分, 应用很广泛, 可以根据灰度差异来分割图像不同部分 ⚫ 阈值化处理的图像一般为单通道图像(灰度图) ⚫ 阈值化参数的设置可以使用滑动条来debug ⚫ 阈值化处理易光照影响, 处理时应注意 ⚫ 本节主要介绍…...

1.5 极限运算法则

思维导图: 我的理解: 如果一个数列{a_n}是一个无穷小,那么它的极限为0,即lim(n→∞)a_n0。同样地,如果另一个数列{b_n}也是一个无穷小,那么它的极限为0,即lim(n→∞)b_n0。 当我们考虑这两个无…...

首批因AI失业的人出现-某游戏公司裁掉半数原画师

如今各种AI爆火,不可避免的的会与某些功能撞车职业发生冲突,每一次生产力的变革,在带来技术进步与更高效率的同时,也都无可避免的会带来一波失业浪潮,当下的人工智能浪潮自然也不例外。 现在,第一批因为AI…...

字符串转换整数(atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符…...

Servlet练习

练习准备 编写Student和StudentDao package beans;public class Student{private String num;private String name;public Student(){}public String getNum() {return num;}public String getName() {return name;}public void setNum(String num) {this.num num;}public v…...

美国高速公路信号灯控制项目的大致逻辑和步骤 智慧公路设计

美国高速公路信号灯控制项目的大致逻辑和步骤: 美国那边先提供一个关于具体做什么需求、那边的设备(信号灯)有什么参数,什么接口,分别是什么属性等等的详细设计文档,开发人员拿到这个文档以后把它看懂&…...

数字电源专用IC,国产C2000, QX320F280049

一、特性参数 1、独立双核,32位CPU,单核主频400MHz 2、IEEE 754 单精度浮点单元 (FPU) 3、三角函数单元 (TMU) 4、1MB 的 FLASH (ECC保护) 5、1MB 的 SRAM (ECC保护&…...

第六章 ARM汇编语言程序设计【嵌入式系统】

第六章 ARM汇编语言程序设计【嵌入式系统】前言推荐第六章 ARM汇编语言程序设计6.1 概述6.2 ARM汇编语言指示符6.3 ARM编程举例6.4 ARM过程调用6.5 典型举例6.6 内嵌汇编C与汇编相互调用最后前言 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 无 第六章 ARM汇编语…...

详细讲讲Java线程的状态

TERMINATED状态 是什么状态? 在Java线程的生命周期中,TERMINATED状态是线程的最终状态,表示线程已经执行完毕并已经退出。当一个线程完成了它的工作,或者因为异常而提前结束时,它会进入TERMINATED状态。此时线程不再执…...

企业月结快递管理教程

回答这个问题的之前,我们先来看看什么是企业月结快递管理...... 经济的发展,技术的进步,电商行业的加持之下,这几年快递行业的发展有目共睹。不仅是我们的生活离不开快递,很多企业的运作多多少少也离不开“快递”二字…...

cm cdp告警 Swap Memory Usage Suppress...

原因:服务器没有关swap,服务使用了swap 在cdp集群中,一般要关掉swap,如果没有关。可以使用 下面命令设置程序尽可能不使用swap,使用swap会影响性能 修改后,重启服务就不会使用swap了 sysctl -w vm.swappi…...

3.8——友元

类的主要特点之一是信息隐藏和封装,即类的私有成员和保护成员只能在定义的范围内使用,也就是说私有成员和保护成员只能通过类的成员函数来访问。但是,有时候我们在类外也需要访问私有成员数据或保护成员数据怎么办。这时我们就要通过友元函数…...

C++ OOP Feature Conclusion (更新中)

目录 1.类与对象 1.1 基本概念(继承、封装、抽象、多态) 1.2类的声明 1.3成员函数(对象所占空间取决于数据成员,和成员函数无关) 1.4数据成员(不能在类中初始化) 1.5构造与析构函数&#xff08…...

【HTTP】Cookie、Session、Token以及Cookie优化

Cookie、Session、TokenCookie优化Cookie、Session、Token 在开始介绍Cookie安全之前,我们先来了解一下实现授权的方式。 在登录功能中,为了记住登录成功后的信息,在客户端,我们通常会使用Cookie来记录,但是&#xf…...

npm之报错:Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules‘

1.报错 363 error [Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/tldr’ -> ‘/usr/local/lib/node_modules/.tldr-8nq4AGAt’] { 363 error errno: -13, 363 error code: ‘EACCES’, 363 error syscall: ‘rename’, 363 error path: ‘/usr/…...

「SQL面试题库」 No_30 超过5名学生的课

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…...

自定义maven插件,在项目中命令启动springboot并加载当前项目资源

背景 最近在制定团队内公用的基础框架,基于单应用多module的架构思路,使用maven管理项目依赖,在项目中定义了一个springboot模块,该模块依赖具体的业务实现模块,启动后通过扫描路径下的类加载服务,业务开发…...

Linux系统【Centos7】更新内核更新软件详细教程

更新内核: 1. 打开终端,输入命令 sudo yum update,等待更新完成。 2. 重启系统,输入命令 sudo reboot。 3. 在 GRUB 引导界面,选择最新的内核版本,按下回车键进入系统。 4. 在终端中输入命令 uname -r&…...

C++ 中new/delete与malloc/free详解

文章目录前言一、new/delete1. 序言2. 使用方法2.1. new 和 delete 基本语法2.2. new 和 delete 的底层实现原理3. 底层原理3.1. operator new 和 operator delete3.2. new 和 delete 的底层实现原理4. 注意事项5. 总结二、malloc/free1. 序言2. 使用方法2.1. malloc 和 free 基…...

crm软件哪个好?该如何选择?

crm软件哪个好?该如何选择? 首先我们需要明确一下什么是好的CRM系统,优质的CRM系统应该具备以下优势: 1)提高销售效率:通过CRM系统,销售人员可以跟踪客户互动历史和交易记录,了解客…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

Linux入门课的思维导图

耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...