cv2.threshholding()简单阈值、自适应阈值,Octus阈值
@[TOC](cv2.threshholding()简单阈值、自适应阈值,Octus阈值
这篇博客将延续上一篇简单阈值处理,继续介绍自适应阈值及Octus阈值;
- 简单阈值详情见: https://blog.csdn.net/qq_40985985/article/details/115379934 采取全局阈值,并不适用于所有图像;
- 自适应阈值算法针对图像中的一小部分区域计算阈值。对于同一幅图像的不同区域,采用不同的阈值,尤其是不同光照的图像,效果会更好;
- Octus阈值
1. 效果图
自适应阈值效果图如下:
原始图 VS 简单阈值 VS 均值阈值 VS 高斯阈值效果图:
Octus阈值效果图如下:官方的效果要好一些~
2. cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
- img 图像
- cv2.ADAPTIVE_THRESH_MEAN_C : 阈值是邻域面积的平均值。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值的加权和,其中权重是高斯窗口; - blockSize:邻域面积的大小
- C:常数,从计算的平均值或加权平均值中减去。
3. 源码
3.1 自适应阈值
# 简单阈值使用全局值作为阈值,在不同区域的不同光照条件下,它可能并不适用于所有的情况。
# 自适应阈值算法针对图像中的一小部分区域计算阈值。因此,对于同一幅图像的不同区域,采用不同的阈值,对于不同光照的图像,效果会更好;import cv2
from matplotlib import pyplot as pltimg = cv2.imread('gw.jpg', 0)
img = cv2.medianBlur(img, 5)ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)titles = ['Original Image', 'Global Thresholding (v = 127)','Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]for i in range(4):plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()
3.2 Octus阈值
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('gw.jpg', 0)# 简单阈值
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# Otsu's阈值
ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 高斯滤波后Otsu's阈值
blur = cv2.GaussianBlur(img, (5, 5), 0)
ret3, th3 = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 绘制所有图像及直方图~
images = [img, 0, th1,img, 0, th2,blur, 0, th3]
titles = ['Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)','Original Noisy Image', 'Histogram', "Otsu's Thresholding",'Gaussian filtered Image', 'Histogram', "Otsu's Thresholding"]for i in range(3):plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray')plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([])plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256)plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([])plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray')plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([])
plt.show()
参考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html#thresholding
cv2.threshholding()简单阈值、自适应阈值,Octus阈值相关推荐
- OpenCV-Python学习笔记(八):图像阈值:简单阈值、自适应阈值、 Otsu's阈值
目标 • 本节你将学到简单阈值,自适应阈值, Otsu's 二值化等 • 将要学习的函数有 cv2.threshold, cv2.adaptiveThreshold 等. 1.简单阈值 与名字一样,这 ...
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)
OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...
- 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)
文章目录 图像二值化处理 二值化原理 API介绍 手动设置阈值 均值法 迭代法 自动设置阈值 直方图法 全局阈值法 OTSU法 三角形法 自适应阈值法 API 绘制图像直方图 图像二值化处理 二值化原 ...
- 数字图像处理(作业三)——孔洞填充+全局阈值+自适应阈值
一.孔洞填充 基本思想: 基于形态学算法,膨胀后与上取反的原图 算法实现步骤: 1.首先找出所有孔洞的位置,只需知道洞中的一个点的坐标即可,下面直接以改点代替该洞 2.新建一张全零图,用0表示背景,1 ...
- 机器学习进阶-阈值与平滑-图像阈值 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)...
1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...
- opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值
1.图像定义: 彩色图像 :三通道,像素值一般为0~255: 灰度图像:单通道,像素值一般为0~255: 二值图像:单通道,像素值一般为0(黑色).255(白色): 彩色图像颜色范围查询表: 2.图像 ...
- python阈值计算_机器学习进阶-阈值与平滑-图像阈值 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)...
1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...
- 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)
1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...
最新文章
- 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络
- 迭代3:UC1,UC2的2.1 业务建模 2.2 UC2用例模型 2.3 UC2补充性规格说明
- python花钱培训值吗-Python培训费用高不高?Python培训真的值得吗?
- Hive几种数据导入方式
- 设计微服务架构需要掌握的基础知识
- 并行流 线程池_使用自定义线程池处理并行数据库流
- IDEA常用快捷键大合集
- echarts 环形图鼠标悬停
- 如何找到CPU飙升的原因
- 《当时只道是寻常》——安意如——品纳兰容若《饮水词》
- 论文清单:一文梳理因果推理在自然语言处理中的应用
- svchost 总是占用网速 一招见效(实测)
- 退款java_APP支付 + 退款(JAVA实现)
- SGD(随机梯度下降)
- 计算机绘图软件应用于哪些领域,解答电脑绘图软件有哪些
- OCI动态链接ORACLE
- vsc 好用的插件
- element plus 引入icon
- 小白扫盲:浅谈web应用在nat123下的vip服务
- 康耐视智能相机IO操作笔记
热门文章
- pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
- android 底部弹框 BottomSheetDialog 的使用
- org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
- tar 和gzip 的区别
- pg_basebackup 配置 stream replication 异步/同步
- 管理员技术(六): 硬盘分区及格式化、 新建一个逻辑卷、调整现有磁盘的分区、扩展逻辑卷的大小、添加一个swap分区...
- 2022-2028年中国润滑油基础油行业市场研究及前瞻分析报告
- 计算机软件属于输入还是输出,计算机基本输入输出系统是什么意思(基本输入输出系统简介)...
- XCODE 6.1.1 配置GLFW
- Spring.Net Aop