图像处理之二值化

article/2025/11/6 8:37:25

图像处理之二值化

    • 二值化方式
    • 二值化算法

二值化方式

二值化方式分为五种:
THRESH_BINARY:将大于某一个阈值的变成最大值,其他为0
THRESH_BINARY_INV:和THRESH_BINARY恰好相反
THRESH_TRUNC: trunc就是截断的意思, 将大于某一阈值的像素直接设置为阈值大小,其他不变
THRESH_TOZERO:和trunc相反,在暗色部分截断,小于某一阈值就设置为0,其他不变
THRESH_TOZERO_INV:和tozero相反,大于阈值设置为0,其他不变

方式公式处理后原始图
THRESH_BINARY$1600在这里插入图片描述dgsa
THRESH_BINARY_INV在这里插入图片描述在这里插入图片描述在这里插入图片描述
THRESH_TRUNC在这里插入图片描述在这里插入图片描述在这里插入图片描述
THRESH_TOZERO在这里插入图片描述在这里插入图片描述在这里插入图片描述
THRESH_TOZERO_INV在这里插入图片描述在这里插入图片描述在这里插入图片描述

二值化算法

二值化算法分为普通二值化,自适应二值化,OTSU二值化(注意:二值化输入只能是灰度图

普通二值化

#low: 阈值
#high: 最大值
ret, binay = cv2.threshold(img,  low, higher, cv2.THRESH_BINARY)

自适应二值化
自适应二值化的阈值不是自己设定的而是算出来的,算的方法有平均值法,和高斯平均法
平均值法:取一个窗口的平均值作为阈值
高斯平均法:按高斯分布对窗口内的像素取加权和

#ADAPTIVE_MEAN_C: 自适应方法
#255 : 最大值
#11: 窗口大小
#2 :常数
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_MEAN_C, cv2.THRESHOLD_BINARY, 11, 2)

OTSU二值化
OTSU又称最大类间方差法,顾名思义就是找到一个阈值使得大于该阈值和小于该阈值的两部分像素的方差和最大,目的是为了去掉尽可能多的信息,只保留最基本的信息。
在这里插入图片描述
对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。 假设图像的背景较暗,并且图像的大小为M×N, 图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:
      ω0=N0/ M×N (1)
      ω1=N1/ M×N (2)
      N0+N1=M×N (3)
      ω0+ω1=1 (4)
      μ=ω0μ0+ω1μ1 (5)
      g=ω0(μ0-μ)2+ω1(μ1-μ)2 (6)
将式(5)代入式(6),得到等价公式: g=ω0ω1(μ0-μ1)^2 (7)
采用遍历的方法得到使类间方差最大的阈值T,即为所求。

ret, binay = cv2.threshold(img,  low, higher, cv2.THRESH_BINARY|cv2.THRESH_OTSU)

http://chatgpt.dhexx.cn/article/ySbKZRi7.shtml

相关文章

二值化方法

一、全局阈值法 1.固定阈值方法 该方法是对于输入图像中的所有像素点统一使用同一个固定阈值。其基本思想如下: 其中,T为全局阈值。 缺点:很难为不同的输入图像确定最佳阈值。 2.Otsu算法 Otsu算法又称最大类间方差法 先明确两个概念: (1)均值 (2)方差 图像的阈…

图像处理一之-摄像头二值化处理-(什么是二值化)

图像二值化 binary image 什么是二值化: 二值化是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰度值(阈值)的像素灰度设为灰度极大值(255),把小于这个值的像素灰度设为灰度极小值(0)&#…

C#多线程详解(一) Thread.Join()的详解

什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器…

1.java的协程_虚拟线程

盼过了春天盼秋天,从2017年到今天五年了,终于盼到loom转正了,当看到jdk19预览api的时候心情那个激动。。。期待已久的协程终于来临,再也不羡慕别人家的go孩子,咱终于可以理直气壮的说一句:咱也有&#xff0…

Kotlin协程到底是怎么切换线程的?你是否知晓?

好文推荐: 作者:RicardoMJiang 前言 之前对协程做了一个简单的介绍,回答了协程到底是什么的问题,感兴趣的同学可以了解下:【带着问题学】协程到底是什么? 通过上文,我们了解了以下内容 1.kotlin协程本质上对线程池的…

进程和线程、协程的区别

一、进程 进程是程序一次动态执行的过程,是程序运行的基本单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、页表、文件句柄等)比较…

进程、线程与协程的比较

进程、线程和协程是三个在多任务处理中常听到的概念,三者各有区别又相互联系。 一、并行和并发 在介绍进程、线程和协程这三个概念之前,有两个操作系统中的相关概念需要简单解释一下:并行和并发。 并行:指多个任务同时执行。 并…

进程、线程、协程

进程、线程、协程 一、概念与区分 1、进程 进程是程序一次动态执行的过程,是程序运行的基本单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、…

终于明白:有了线程,为什么还要有协程?

并发的发展历史 其实,在早期计算机并没有包含操作系统,这个时候,这个计算机只跑一个程序,这个程序独享计算机的所有资源,这个时候不存在什么并发问题,但是对计算机的资源来说,确实是一种浪费。…

Java中的多线程(线程间通信)

/学习笔记/ 线程间通信: 多个线程在处理同一资源,但是任务却不同。 先看一个例子,采用两个线程执行进行输入和输出任务: //资源class Resource{String name;String sex;}//输入class Input implements Runnable{Resource r ;// …

协程和线程的区别、协程原理与优缺点分析、在Java中使用协程

文章目录 什么是协程协程的优点与缺点协程实现原理.协程与线程在不同编程语言的实现在Java中使用协程Kilim介绍Kilim整合Java,使用举例 小总结 什么是协程 相对于协程,你可能对进程和线程更为熟悉。进程一般代表一个应用服务,在一个应用服务中可以创建多…

进程、线程和协程之间的区别和联系

文章目录 一、进程二、线程三、进程和线程的区别与联系四、一个形象的例子解释进程和线程的区别五、进程/线程之间的亲缘性六、协程 一、进程 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个…

简单了解线程和协程(C#)

1.为什么需要线程和协程: (1)使程序中的任务可以并发执行,让程序同时处理多个任务,提高程序的运行效率和响应速度 (2)线程和协程可以共享同一个进程的资源,避免多个进程之间的资源浪…

线程与协程

线程与协程 概念进程【进程间通信(IPC)】 线程协程 区别场景计算密集型IO密集型两种操作如何优化哪些语言对多协程的支持 概念 进程 二进制可执行文件在计算机内存里的一个运行实例。比如.exe文件是个类,进程就是new出来的那个实例&#xf…

总结:协程与线程

一、介绍 本文主要梳理下进程,线程,协程的概念、区别以及使用场景的选择。 二、进程 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完…

Java线程协程

目录 线程的实现(OS&&JVM) 1.内核线程实现 2.用户线程实现 3.混合实现 4.Java线程的实现 ——如何实现不受Java虚拟机规范的约束 Java线程调度——系统自动完成(可能被干预) Java线程状态转换 内核线程的局限 协…

CDH6.3.2安装文档

正式安装之前,先说明一下CDH是基于Apache Hadoop及相关项目的发行版。CDH通过WEB界面管理,并提供了hadoop的两个核心功能:可扩展存储和分布式计算,以及企业级的重要功能。CDH是遵循Apache-licensed的开源软件,提供了基…

CDH数仓项目(一) —— CDH安装部署搭建详细流程

0 说明 本文以CDH搭建数据仓库,基于三台阿里云服务器从零开始搭建CDH集群,节点配置信息如下: 节点内存安装服务角色chen10216Gcloudera-scm-serverchen1038Gcloudera-scm-agentchen1048Gcloudera-scm-agent 上传需要用到的安装包&#xff…

CDH5.8安装说明

#CDH5.8安装说明 (Hadoop) 使用过Ambari,不知道是因为没有商业运作支撑还是社区活跃度有限,总体管理能力只能算凑合。很多Hadoop组件版本都不高,Spark也才1.3.X,Sqoop还是1.4.6.2.3,相对版本都比较低,而且…

大数据CDH安装详细教程

1.环境准备 1.1 服务器配置(理想配置) 1.2 修改主机名和hosts文件(所有节点) [roothadoop001 ~]# vim /etc/hosts vim /etc/hostname1.3 关闭防火墙 systemctl stop firewalld systemctl disable firewalld1.4 SSH免密登录(主节点) ssh-keygen -t rsa #分发到所有节点 ssh…