《OpenCV 轻松入门 面向Python》 学习笔记

阈值处理

  • 自适应阈值处理
  • 阈值 Otsu 处理
  • 自适应阈值处理 与 OTSU阈值处理 的差异:

自适应阈值处理

对于色彩均衡的图像来说,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,如果只用一个阈值,就无法得到清晰有效的阈值分割结果图像。

所以这一节我们介绍自适应阈值处理(阈值是变化的)。在阈值处理时,自适应阈值处理方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用阈值对当前像素进行处理。与普通阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大的图像。

函数原型:

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethold, thresholdType, blickSize, C)

参数:

  • dst:自适应阈值处理后的结果图像
  • src:原始图像
  • maxValue:最大值
  • adaptiveMethold:自适应方法
  • thresholdType:阈值处理方式,该值只能是cv.THRESH_BINARY,或者cv.THRESH_BINARY_INV
  • blockSize:计算像素阈值时,在像素周围的取的临近区域大小,通常取值为3, 5, 7
  • C:常量,自适应阈值等于每个像素由参数blocksize所指定邻域的加权平均值减去常量C

自适应阈值处理方法 adaptiveMethold 有两种:

  • cv2.ADAPTIVE_THRESH_MEAN_C:邻域所有像素点的权重是一致的
  • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个像素点的权重值

举例:

dst = cv2.adaptiveThreshold(src_img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 3)

阈值 Otsu 处理

在使用函数cv.threshold()进行阈值处理时,需要自定义一个阈值,并以此阈值作为图像阈值处理的依据。通常情况下图像都是色彩均衡的,这是直接将阈值设为127是比较合适的。

但是,有时图像灰度级的分布是不均匀的,如果此时还将阈值设值为127,那么阈值处理的结果就是失败的。

如果有一个图像:
[ 123 123 123 123 123 123 123 123 123 123 123 123 126 126 126 123 123 126 126 126 123 123 126 126 126 ] \begin{bmatrix} 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡​123123123123123​123123123123123​123123126126126​123123126126126​123123126126126​⎦⎥⎥⎥⎥⎤​

如果此时仍然以127作为阈值,那么图像处理结果就是
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡​00000​00000​00000​00000​00000​⎦⎥⎥⎥⎥⎤​
很显然,真是不合理的,我们可以观察到,如果我们以阈值125进行分割,可以得到较好的效果
[ 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡​00000​00000​00255255255​00255255255​00255255255​⎦⎥⎥⎥⎥⎤​
OTSU可以帮我们遍历所有可能的阈值,从而找到最佳的阈值

举例:

t, result_img = cv2.threshold(src_image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

具体操作方法是:

  • 在普通阈值操作函数cv2.threshold()中,对参数type的类型多传递一个参数cv2.THRESH_OTSU,即可实现Otsu方式的阈值分割
  • 必须要把阈值设定为0
  • 返回的t是Otsu方法计算得到并使用的最优阈值, 返回值 result_img 是阈值处理后的结果图像

自适应阈值处理 与 OTSU阈值处理 的差异:

  • 自适应阈值处理是按照blocksize的尺寸,逐个像素找阈值,也就是说,处理每个像素所用的阈值是不一样的。这也就是为啥返回值没有 threshold。

  • OTSU阈值处理,会给图像找一个统一使用的阈值,所有的像素都是按照这个阈值处理的。返回值有两个,第一个返回值就是threshold。

6.2 阈值处理-- 自适应阈值处理和 阈值Otsu处理相关推荐

  1. cv2.threshholding()简单阈值、自适应阈值,Octus阈值

    @[TOC](cv2.threshholding()简单阈值.自适应阈值,Octus阈值 这篇博客将延续上一篇简单阈值处理,继续介绍自适应阈值及Octus阈值: 简单阈值详情见: https://bl ...

  2. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  3. OpenCV-Python学习笔记(八):图像阈值:简单阈值、自适应阈值、 Otsu's阈值

    目标 • 本节你将学到简单阈值,自适应阈值, Otsu's 二值化等 • 将要学习的函数有 cv2.threshold, cv2.adaptiveThreshold 等. 1.简单阈值 与名字一样,这 ...

  4. opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值

    1.图像定义: 彩色图像 :三通道,像素值一般为0~255: 灰度图像:单通道,像素值一般为0~255: 二值图像:单通道,像素值一般为0(黑色).255(白色): 彩色图像颜色范围查询表: 2.图像 ...

  5. 小波自适应阈值选取python_小波去噪阈值如何选取_小波阈值分析 - 全文

    1.小波阈值去噪法的流程如下所示: 小波图像去噪就是根据信号和噪声的小波系数在不同尺度上具有不同性质的原理,利用相应的数学工具构造系数选择方式,对带噪信号的小波系数进行处理.小波去噪过程就是利用小波分 ...

  6. matlab求阈值的函数,小波分析中matlab阈值获取函数及其应用附程序代码.doc

    小波分析中matlab阈值获取函数及其应用附程序代码.doc 1.小波分析中MATLAB阈值获取函数MATLAB中实现阈值获取的函数有DDENCMP.THSELECT.WBMPEN和WWDCBM,下面 ...

  7. 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现

    环境:Python3.8 和 OpenCV 内容:自适应阈值分割代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as ...

  8. 全局阈值和自适应阈值

    1.均值法 计算图片的色彩平均值,然后大于阈值的设置为255,小于阈值的设置为0. 2.OTSU 通过寻找类内最小方差:即先将图像按照色彩画出直方图.按色彩值分成两个大类,使每个类的方差最小. 3.三 ...

  9. 利用阈值分割原理,对给定图像编程实现二值、反二值、截断、反截断、大津阈值、自适应阈值等类型阈值图像分割,给出实现源码和结果图像。

    程序 import cv2 import numpy as np from matplotlib import pyplot as pltimg = cv2.imread('1.jpg', 0) # ...

最新文章

  1. 用C#制作新闻阅读器(电脑报2005年3月14日 第10期)
  2. Java常见面试题汇总
  3. IoTSharp部署教程-Sqlite分表篇
  4. android struts2 图片上传,xhEditor struts2实现图片上传
  5. Java的反射机制(Reflection)
  6. [工具]将xml文件转换为html显示
  7. CVTE 2017 秋季校招笔试题回忆(C++后台)
  8. Xception: DeepLearning with Depthwise Separable Convolutions2017Google【论文理解】
  9. Python中流程控制-for循环(序列/字典举例)
  10. LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(一)之效果展示与关键技术简介
  11. Mybatis collection 递归查询并自动装填所有子节点(多参数查询传入参数方法)
  12. 计算机模拟病例考试试题,计算机模拟病例考试的效标—关联效度研究
  13. 因果分析.科学实验评估
  14. 给控件做数字签名——摘录自阿泰博客
  15. django Mezzanine uwsgi nginx 配置
  16. 为什么别人总是把你往“坏处想”?浅谈如何更好地与项目团队中的“网友”更好地交流
  17. 中电信CDMA战略 CDMA+WiFi成杀手锏
  18. MySql学习之组合查询(UNION)和全文本搜索(Match()和Against())
  19. Java语言程序设计基础篇(第十版)课后习题答案 - 第一章
  20. 全国民众信息泄露,包括总统、政要和明星

热门文章

  1. 动态链接库、静态链接库
  2. 十大经典三维动画制作软件
  3. java 电商锁库存实现_电商项目扣减库存方案
  4. Java编程语言介绍
  5. Java中replaceAll去除不掉空格解决方案
  6. JavaWeb(后端)
  7. graduate计算机专业英语词汇,药物分析专业英语词汇.pdf
  8. 成都培训机构怎么筛选?
  9. WPF的Effect效果
  10. linux防火墙过滤规则