OpenCV之阈值化操作总结
参考:https://blog.csdn.net/sinat_21258931/article/details/61418681
在做图像处理时,阈值化(二值化)是一个非常常见的操作,其中最关键的是阈值的选择,会直接影响到阈值化效果,本文对opencv常见的阈值化操作进行总结。
1 固定阈值
如果说图像质量较好,目标和背景容易区分,可以选择固定阈值来进行二值化,用到的函数是threshold()
函数原型
ret, dst = cv2.threshold(src, thresh, maxval, type)
其中:
- src: 输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- thresh: 阈值
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- type:二值化操作的类型,包含以下5种类型:
阈值类型 | 操作 |
cv2.THRESH_BINARY | DST=(SRC>thresh) ? MAXVALUE:0 |
cv2.THRESH_BINARY_INV | DST=(SRC>thresh) ? 0:MAXVALUE |
cv2.THRESH_TRUNC | DST=(SRC>thresh) ? THRESH:SRC |
cv2.THRESH_TOZERO | DST=(SRC>thresh) ? SRC:0 |
cv2.THRESH_TOZERO_INV | DST=(SRC>thresh) ? 0:SRC |
上边的type很好理解,比如第一个cv2.THRESH_BINARY表示当像素值大于设定的阈值时置为MAXVALUE,否则置为0
2 自适应阈值
上边固定阈值的方法适用于比较理想的场景,实际在使用时,由于图片的光线条件变化,固定的阈值往往不能很好的将目标与背景分离,这个时候就需要用到自适应阈值的方法,自适应阈值会根据一小片区域的值来动态调整阈值,使最后的输出更合理。用到的函数是adaptiveThreshold()
函数原型
dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)
这个函数的作用是通过计算每个像素位置周围的b x b区域的加权平均值,然后减去常数C,其中b由Block Size给定,要设置为奇数,其中,dst、src、maxval、type与固定阈值函数threshold()中含义相同,其余参数含义如下:
- thresh_type: 阈值的计算方法,包含以下2种类型:
类型 | 含义 |
cv2.ADAPTIVE_THRESH_MEAN_C | 计算均值时每个像素的权值是相等的 |
cv2.ADAPTIVE_THRESH_GAUSSIAN_C | 计算均值时每个像素的权值根据其到中心点的距离通过高斯方程得到 |
- Block Size: 图片中分块的大小
- C :阈值计算方法中的常数项
关于Block Size和C的取值,一般Block Size取3~17比较合适,C也不宜太大,可取3~9,具体的值需要自己测试调节。
下图为对一幅图片用不同方法进行阈值化时的效果,可以看到,相对于一般的阈值化操作,当图像中出现较大的明暗差异时,自适应阈值是非常有效的
OpenCV之阈值化操作总结相关推荐
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
阈值化操作在图像处理中是一种常用的算法,比如图像的二值化就是一种最常见的一种阈值化操作.opencv2和opencv3中提供了直接阈值化操作cv::threshold()和自适应阈值化操作cv::ad ...
- OpenCV自适应阈值化函数adaptiveThreshold详解,并附实例源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-6-14日:又发现一种阈值分割法,最大 ...
- 自适应阈值化操作:adaptiveThreshold()函数
在图像阈值化操作中,更关注的是从二值化图像中,分离目标区域和背景区域,但是仅仅通过设定固定阈值很难达到理想的分割效果.而自适应阈值,则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样 ...
- 毛星云opencv之阈值化函数threshold--摘抄
- 利用OpenCV的threshold函数实现双阈值法二值化操作的源码
直接上源码吧,很简单,一看就懂,如果你不明白,可以举两个灰度值实际代入进行理解! 源码如下: 源码中用到的图像的下载链接为:hand1.jpg_免费高速下载|百度网盘-分享无限制 图像处理开发需求.图 ...
- opencv 腐蚀 matlab,Opencv3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换...
19 腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形 ...
- OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold()
OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold() 一.定义: 1)固定阈值操作 double threshold( InputArray src, ...
- OpenCV图像处理(十二)---图像阈值化
如果两个热力学系统中的每一个都与第三个热力学系统处于热平衡(温度相同),则它们彼此也必定处于热平衡.这一结论称做"热力学第零定律".又称热平衡定律,是热力学的四条基本定律之一,是一 ...
最新文章
- 科学:螳螂虾大脑拥有记忆和学习中心
- SQL Server 数据库的维护(一)__存储过程(procedure)
- Transformer LambdaNetworks
- Ceph Luminous安装指南
- Java——集合的遍历之迭代遍历
- 【华为云技术分享】HDC.Cloud | 为防止交通事故,95后学生运用“黑科技”这样做!
- java为什么要分为service层,dao层,controller层
- Vue第三天 v-model与Vue组件化
- intel网卡驱动下载linux,intel网卡驱动下载
- 乒乓球单循环赛_乒乓球单循环赛
- 天池大数据竞赛平台-东电网智慧现场作业挑战赛:识别高空作业及安全带佩戴Baseline(非官方)
- python-lambda(匿名函数)原理与应用
- 如何进入华为P40 debug 模式/开发者选项模式
- Java的抗辩本位制
- javaAPI文档中文版(JDK11在线版)无需下载、直接打开
- 广州塔C语言程序,小蛮腰 led广州塔diy程序
- 组态王软件与200smart无线以太网通信方案详解
- mysql 表 rowid_SQLite数据表的rowid
- Jfinal 框架搭建
- python 设置ip地址_无法设置IP地址