【笔记】opencv阈值处理 threshold函数 cv2.THRESH_BINARY ,cv2.THRESH_TRUNC) cv2.adaptiveThreshold()
像素是在模拟图像数字化时对连续空间进行离散化得到的。每个像素具有整数行(高)和列(宽)位置坐标,同时每个像素都具有整数灰度值或颜色值。
threshold函数
返回的第一个参数为阈值,第二个为结果图像
ret,dst = cv2.threshold(src,thresh,maxval,type)
二值化阈值处理(cv2.THRESH_BINARY)
二值化阈值处理会将原始图像处理为仅有两个值的二值图像,其针对像素点的处理方式为:在8位图像中,最大值是255。因此,在对8位灰度图像进行二值化时,如果将阈值设定为127,那么: ● 所有大于127的像素点会被处理为255。 ● 其余值会被处理为0。
阈值设置为210:
设置为240:
反二值化阈值处理(cv2.THRESH_BINARY_INV)
反二值化阈值处理的结果也是仅有两个值的二值图像,与二值化阈值处理的区别在于,二者对像素值的处理方式不同。反二值化阈值处理针对像素点的处理方式为:
● 对于灰度值大于阈值的像素点,将其值设定为0。
● 对于灰度值小于或等于阈值的像素点,将其值设定为255。
上面的图使用反二值化阈值处理之后:
截断阈值化处理(cv2.THRESH_TRUNC))
截断阈值化处理会将图像中大于阈值的像素点的值设定为阈值,小于或等于该阈值的像素点的值保持不变
设置上面图片的阈值为210来处理:
发现设置为240时跟原图感觉差不多,说明像素值大于240的很少
超阈值零处理(cv2.THRESH_TOZERO_INV)
超阈值零处理会将图像中大于阈值的像素点的值处理为0,小于或等于该阈值的像素点的值保持不变。即先选定一个阈值,然后对图像做如下处理:
● 对于像素值大于阈值的像素点,其像素值将被处理为0。
● 对于像素值小于或等于阈值的像素点,其像素值将保持不变。
低阈值零处理(cv2.THRESH_TOZERO)
低阈值零处理会将图像中小于或等于阈值的像素点的值处理为0,大于阈值的像素点的值保持不变。即先选定一个阈值,然后对图像做如下处理:
● 对于像素值大于阈值的像素点,其值将保持不变。
● 对于像素值小于或等于阈值的像素点,其值将被处理为0。
自适应阈值处理
对于色彩均衡的图像,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,此时如果只使用一个阈值,就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术,其使用变化的阈值完成对图像的阈值处理,这种技术被称为自适应阈值处理。在进行阈值处理时,自适应阈值处理的方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用该阈值对当前像素点进行处理。与普通的阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大的图像。 OpenCV提供了函数cv2.adaptiveThreshold()来实现自适应阈值
dst=cv.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)
● dst代表自适应阈值处理结果。
● src代表要进行处理的原始图像。需要注意的是,该图像必须是8位单通道的图像。
● maxValue代表最大值。
● adaptiveMethod代表自适应方法。
函数包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C两种不同的方法这两种方法都是逐个像素地计算自适应阈值,自适应阈值等于每个像素由参数blockSize所指定邻域的加权平均值减去常量C。两种不同的方法在计算邻域的加权平均值时所采用的方式不同: 【● cv2.ADAPTIVE_THRESH_MEAN_C:邻域所有像素点的权重值是一致的。
● cv2.ADAPTIVE_THRESH_GAUSSIAN_C:与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个点的权重值。】
● thresholdType 代表阈值处理方式,该值必须是 cv2.THRESH_BINARY 或者cv2.THRESH_BINARY_INV中的一个。
● blockSize代表块大小。表示一个像素在计算其阈值时所使用的邻域尺寸,通常为3、5、7等。
● C是常量。
一开始用这个方法的时候由于图片不是单通道的,导致报错,一定要注意。
报错:
dst2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)
cv2.error: OpenCV(4.5.1)
C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wvn_it83\opencv\modules\imgproc\src\thresh.cpp:1676:
error: (-215:Assertion failed) src.type() == CV_8UC1 in function
‘cv::adaptiveThreshold’
加上img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)后成功运行。
img = cv2.imread("p7.jpg")
t,rst = cv2.threshold(img,200,255,cv2.THRESH_BINARY)img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)
dst = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 3)
cv2.imshow("r",dst)
cv2.imshow("r2",dst2)
print(img)
#
OTSU处理
在 OpenCV 中,通过在函数 cv2.threshold()中对参数 type 的类型多传递一个参数“cv2.THRESH_OTSU”,即可实现Otsu方式的阈值分割。 需要说明的是,在使用Otsu方法时,要把阈值设为0。此时的函数cv2.threshold()会自动寻找最优阈值,并将该阈值返回。例如,下面的语句让函数cv2.threshold()采用Otsu方法进行阈值分割:
t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 与普通阈值分割的不同之处在于:
● 参数type增加了一个参数值“cv2.THRESH_OTSU”。
● 设定的阈值为0。
● 返回值t是Otsu方法计算得到并使用的最优阈值。 需要注意,如果采用普通的阈值分割,返回的阈值就是设定的阈值。
实例:
img = cv2.imread("p7.jpg",0)
t,rst = cv2.threshold(img,200,255,cv2.THRESH_BINARY)
tt,rst2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
tt是获取到的最优阈值
img = cv2.imread(“p7.jpg”,0)中的第二个参数不能省略,不然会报错。
其中第二个参数可以取值:
flag = -1, 8位深度,原通道
flag = 0, 8位深度,1通道
flag = 1, 8位深度,3通道
flag = 2, 原深度, 1通道
flag = 3, 原深度, 3通道
flag = 4, 8位深度,3通道
如果阈值设置为127,图片一片空白。
【笔记】opencv阈值处理 threshold函数 cv2.THRESH_BINARY ,cv2.THRESH_TRUNC) cv2.adaptiveThreshold()相关推荐
- opencv阈值处理-threshold函数、自适应阈值处理和Ostu处理
阈值处理是指剔除图像内像素值高于一定值或者低于一定值的像素点.例如设置阈值为125,则大于125的像素点的值设为255,小于125的设为0. 一.threshold函数 open cv3.0使用cv2 ...
- otsu java,opencv阈值处理--threshold函数、自适应阈值处理、Otsu处理(大津法)
threshold函数 retval, dst = cv2.threshold(src, thresh, maxval, type) ''' retval:返回的阈值:dst:阈值分割结果图像 src ...
- OpenCV阈值范围Threshold inRange的实例(附完整代码)
OpenCV阈值范围Threshold inRange的实例 OpenCV阈值范围Threshold inRange的实例 OpenCV阈值范围Threshold inRange的实例 #includ ...
- opencv 二值化 python_opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用...
cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...
- opencv 二值化 matlab,opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH...
cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...
- opencv 阈值分割 — threshold()
OpenCV阈值分割函数:threshold() 函数原型: double threshold(InputArray src, OutputArray dst, double thresh, doub ...
- opencv阈值图像Threshold方法
图像阈值 固定阈值,自适应阈值,Otsu 二值化等 全局阈值和局部阈值 一.图像二值化 定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效 ...
- opencv中的threshold()函数(二值化)
opencv官方解释如下: 参数: src:源图像,可以为8位的灰度图,也可以为32位的彩色图像.(两者由区别) dst:输出图像 thresh:阈值 maxval:dst图像中最大值 type:阈值 ...
- opencv二值化的cv2.threshold函数
(一)简单阈值 简单阈值当然是最简单,选取一个全局阈值,然后就把整幅图像分成了非黑即白的二值图像了.函数为cv2.threshold() 这个函数有四个参数,第一个原图像,第二个进行分类的阈值,第三个 ...
最新文章
- XGBoost缺失值引发的问题及其深度分析 | CSDN博文精选
- pandas移除dataframe字符串数据列中的前N个字符(remove the first n characters from values from column of dataframe)
- Jenkins maven 编译一些问题
- 企业轻资产化趋势难挡,易点租适时而起未来可期
- nginx 同一个端口支持 http https_Nginx
- Mongodb安装搭建Replica Set+Sharding集群
- apachebench ab.exe压力测试
- shiro受权时没有走对应的realm的授权解决方案
- 浅谈移动Web开发:深入概念
- springfox源码_Spring boot整合Springfox在线生成restful的api doc
- camvid数据集使用方法_使用PyTorch处理CIFAR10数据集并显示
- SSH整合方案二(不带hibernate.cfg.xml)
- bios文件查看工具_“主板BIOS教程”手把手教你刷bios,多种bios教程
- CentOS7通过定时脚本阻断异常IP连接SSH(实测)
- ubuntu20.10设置桌面共享的三种方式
- 简易计算器的c++实现
- python语句分号_你知道分号在各种编程语言中的作用吗?
- Ps 钢笔工具的使用
- 阿里云视频点播服务(上传,删除,获取播放地址,获取播放凭证)
- win10和linux怎么切换输入法,win10系统怎么切换输入法
热门文章
- 概率充电器(shoi2014)
- 用 JavaScript 实现手势库 — 支持多键触发【前端组件化】
- overflow的属性介绍
- 《人人都是产品经理2.0》读书笔记
- 曲速未来 提醒:增加使用Delphi Packer来躲避恶意软件分类
- 做家事的比较利益法则
- “知识图谱补全”术语:知识图谱补全、三元组分类、链接预测
- 舌尖上的联通,电信,移动员工
- 软件测试价值提升之路--第3部分“展露锋芒”-第7章“产品质量屏障”-读书笔记
- java visitor_Java 的双重分发与 Visitor 模式