【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中


【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法


3.1 阈值处理基础

阈值就是临界值。图像阈值处理简单、直观,计算速度快,是图像处理的基础操作,在图像分割中处于核心地位。

根据灰度值和灰度值的限制将图像划分为多个区域,或提取图像中的目标物体,是最基本的阈值处理方法。

例如,图像由暗色背景上的亮目标组成,目标像素和背景像素的灰度值组合构成两种主要模式,可以通过设定适当的阈值 T,将图像的像素划分为两类:灰度值大于 T 的像素集是目标,小于 T 的像素集是背景。

如果图像的直方图存在明显边界,容易找到图像的分割阈值;但如果图像直方图分界不明显,则很难找到合适的阈值,甚至可能无法找到固定的阈值有效地分割图像。

当 T 是应用于整幅图像的常数,称为全局阈值处理;当 T 对于整幅图像发生变化时,称为可变阈值处理。有时,对应于图像中任一点的 T 值取决于该点的邻域的限制,称为局部阈值处理。

当图像中存在高斯噪声时,通常难以通过全局阈值将图像的边界完全分开。如果图像的边界是在局部对比下出现的,不同位置的阈值也不同,使用全局阈值的效果将会很差。

OpenCV 提供了函数 cv.threshold 可以对图像进行阈值处理。

函数说明:

cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst

函数 threshold() 可以将灰度图像转换为二值图像,图像完全由像素 0 和 255 构成,呈现出只有黑白两色的视觉效果。

灰度阈值化通过选取的灰度阈值 thresh,将每个像素的灰度值与阈值进行比较,将灰度大于阈值的像素点置为最大灰度,小于阈值的像素点置为最小灰度,得到二值图像,可以突出图像轮廓,把目标从背景中分割出来。

参数说明:

  • scr:变换操作的输入图像,nparray 二维数组,必须是单通道灰度图像!
  • thresh:阈值,取值范围 0~255
  • maxval:填充色,取值范围 0~255,一般取 255
  • type:变换类型
    • cv2.THRESH_BINARY:大于阈值时置 255,否则置 0
    • cv2.THRESH_BINARY_INV:大于阈值时置 0,否则置 255
    • cv2.THRESH_TRUNC:大于阈值时置为阈值 thresh,否则不变(保持原色)
    • cv2.THRESH_TOZERO:大于阈值时不变(保持原色),否则置 0
    • cv2.THRESH_TOZERO_INV:大于阈值时置 0,否则不变(保持原色)
    • cv2.THRESH_OTSU:使用 OTSU 算法选择阈值
  • 返回值 retval:返回二值化的阈值
  • 返回值 dst:返回阈值变换的输出图像

注意:

    1. 函数 cv2.threshold 进行固定阈值的二值化处理;函数 cv2.adaptiveThreshold 为自适应阈值的二值化处理函数,可以通过比较像素点与周围像素点的关系动态调整阈值。
    1. 确切地说,只有 type 为 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV 时输出为二值图像,其它变换类型时进行阈值处理但并不是二值处理。

例程 11.15:图像阈值处理之固定阈值法

    # 11.15 图像阈值处理之固定阈值法# 生成灰度图像hImg, wImg = 512, 512img = np.zeros((hImg, wImg), np.uint8)  # # 创建黑色图像 RGB=0cv2.rectangle(img, (60,60), (450,320), (127,127,127), -1)  # -1 表示矩形填充cv2.circle(img, (256, 256), 120, (205,205,205), -1)  # -1 表示圆形填充# 添加高斯噪声mu, sigma = 0.0, 25.0noiseGause = np.random.normal(mu, sigma, img.shape)imgNoise = img + noiseGauseimgNoise = np.uint8(cv2.normalize(imgNoise, None, 0, 255, cv2.NORM_MINMAX))  # 归一化为 [0,255]# 阈值处理ret, imgBin1 = cv2.threshold(img, 63, 255, cv2.THRESH_BINARY)  # 阈值分割, thresh=63ret, imgBin2 = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY)  # 阈值分割, thresh=125ret, imgBin3 = cv2.threshold(img, 175, 255, cv2.THRESH_BINARY)  # 阈值分割, thresh=175plt.figure(figsize=(10, 7))plt.subplot(231), plt.axis('off'), plt.title("original"), plt.imshow(img, 'gray')plt.subplot(232), plt.axis('off'), plt.title("original with noise"), plt.imshow(imgNoise, 'gray')plt.subplot(233, yticks=[]), plt.title("Gray Hist")  # 直方图histNP, bins = np.histogram(imgNoise.flatten(), bins=255, range=[0, 255], density=True)plt.bar(bins[:-1], histNP[:])plt.subplot(234), plt.title("threshold=63"), plt.axis('off'), plt.imshow(imgBin1,'gray')plt.subplot(235), plt.title("threshold=125"), plt.axis('off'), plt.imshow(imgBin2,'gray')plt.subplot(236), plt.title("threshold=175"), plt.axis('off'), plt.imshow(imgBin3,'gray')plt.tight_layout()plt.show()

在这里插入图片描述


(本节完)


版权声明:

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

Copyright 2022 youcans, XUPT
Crated:2022-4-15


欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法
【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理
【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法
【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现
【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法
【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法
【youcans 的 OpenCV 例程200篇】166.自适应阈值处理
【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理
更多内容,请见:
【OpenCV 例程200篇 总目录-202206更新】

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

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

相关文章

【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理

【OpenCV 例程200篇】 系列,持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理 3.2 全局阈值处理基本方法 当图像中的目标和背景的灰度分布较为明显时,可以对整个图像使用固定阈值进行…

求最大值

在一个整数数组里面求最大的一个数并输出显示。 结果演示 代码演示 package com.six; public class Max {public static void main(String[] args) {int[] arr{4,8,3,30,7,5};int maxgetMax(arr);System.out.println("max"max);}static int getMax(int[] arr){int…

【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法 3.3 全局阈值处理 Otsu 方法 阈值处理本质上是对像素进行分类的统计决策问题。 OTSU 方法又称大津算…

【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现

OpenCV 例程200篇 总目录-202205更新 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现 3.3 全局阈值处理 Otsu 方法 OTSU 方法又称大津算法,使用最大化类间方差(…

近似值匹配

根据文本提示输入英文的星期一到星期日的任意一天的英文的首字母,程序会自动进行近似匹配并输出根据你输入的首字母匹配到的星期。 程序分析 1.大小写的转化 2.判断是否是星期几的英文首字母 3.如果是,输出星期几 4.如果不是给出相应的提示 结果演示 输…

mysql plsql cursor_Oracle--plsql游标创建和使用

游标(cursor)是Oracle系统在内存中开辟的一个工作区,在其中存放SELECT语句返回的查询结果。,PL/SQL隐式建立并自动管理这一游为什么要Oracle游标:先看这个:DECLAREv_empno emp.empno%type;v_ename emp.ename%type;BEGINSELECT emp…

【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法 3.4 全局阈值处理改进方法 在实际的图像处理中,噪声严重影响阈值处理的结果,…

mysql优化 坑_mysql之我们终将踩过的坑(优化)

一、EXPLAIN做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别key列,使用到的索引名。如果没有选…

求1+2!+3!+......+20!的和

使用java算法求求12&#xff01;3&#xff01;…20!的和 结果演示 代码展示 package com.six;public class Qiudsh {public static void main(String[] args) {long sum 0; long temp 1;for(int i1;i<20;i){temp 1;for(int j1;j<i;j){temp temp * j;}sum sumtemp…

计算机设计大赛国奖作品_6. 测试报告

计算机设计大赛国奖作品_6. 测试报告 如果本文对你有帮助&#xff0c;欢迎点赞或在评论区留言&#xff0c;可以发送完整项目文档和源程序。 本系列是2021年中国大学生计算机设计大赛作品“环境监测无人机航线优化”的相关文档&#xff0c;获得2021年西北赛区一等奖&#xff0c…

【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的结果&…

Java实现八大排序算法

我对java的八大排序算法进行了总结&#xff0c;以此文展示Java八大算法 常见排序算法如下&#xff1a; 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 排序方法示例简介 直接插入排序 基本思想 通常人们整理桥牌的方法…

【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的…

乘法口诀表

java程序之乘法口诀表的实现。 结果演示 代码演示 package com.seven;public class Cfb {public static void main(String[] args) {for(int i1;i<9;i){for(int j1;j<i;j){System.out.print(j"*"i""(j*i));}System.out.println("");}}…

mysql explain 派生表_MySQL的Explain命令

Explain命令是查看查询优化器如何决定执行查询的主要办法。调用 EXPLAIN要使用EXPLAIN&#xff0c;只需在查询中的SELECT关键字之前增加EXPLAIN。MySQL会在查询上设置一个标记。当执行查询时&#xff0c;这个标记会使其返回关于在执行计划中每一步的信息&#xff0c;而不是执行…

【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法 3.5 多阈值处理方法 OTSU 方法使用最大化类间方差&#xff08;intra-class variance&#xff09;作为…

完全数

java程序实现完全数&#xff0c;那么什么是完全数的呢&#xff0c;完全数&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&#xff08;即因子函数&#xff09;&#xff0c;恰好等于它本身。 …

【youcans 的 OpenCV 例程200篇】166.自适应阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】166.自适应阈值处理 3.6 自适应阈值处理 噪声和非均匀光照等因素对阈值处理的影响很大&#xff0c;例如光照复杂时 Otsu 算法等全…

任一汉字在Unicode表中的顺序

查询任意一个汉字在Unicode表中的顺序并进行输出显示。 结果演示 代码演示 package com.seven; public class WeiZhi {public static void main(String[] args) {char A 我;System.out.println("汉字 我 在Unicode表中的顺序&#xff1a;"(int)A);}}了解更多关注…

【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长 4. 区域分割的基本方法 4.1 区域生长 区域生长方法将具有相似性质的像素…