@[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阈值相关推荐

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

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

  2. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

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

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

  4. 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)

    文章目录 图像二值化处理 二值化原理 API介绍 手动设置阈值 均值法 迭代法 自动设置阈值 直方图法 全局阈值法 OTSU法 三角形法 自适应阈值法 API 绘制图像直方图 图像二值化处理 二值化原 ...

  5. 数字图像处理(作业三)——孔洞填充+全局阈值+自适应阈值

    一.孔洞填充 基本思想: 基于形态学算法,膨胀后与上取反的原图 算法实现步骤: 1.首先找出所有孔洞的位置,只需知道洞中的一个点的坐标即可,下面直接以改点代替该洞 2.新建一张全零图,用0表示背景,1 ...

  6. 机器学习进阶-阈值与平滑-图像阈值 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)...

    1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...

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

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

  8. python阈值计算_机器学习进阶-阈值与平滑-图像阈值 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)...

    1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...

  9. 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)

    1. ret, dst = cv2.thresh(src, thresh, maxval, type) 参数说明, src表示输入的图片, thresh表示阈值, maxval表示最大值, type表 ...

最新文章

  1. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络
  2. 迭代3:UC1,UC2的2.1 业务建模 2.2 UC2用例模型 2.3 UC2补充性规格说明
  3. python花钱培训值吗-Python培训费用高不高?Python培训真的值得吗?
  4. Hive几种数据导入方式
  5. 设计微服务架构需要掌握的基础知识
  6. 并行流 线程池_使用自定义线程池处理并行数据库流
  7. IDEA常用快捷键大合集
  8. echarts 环形图鼠标悬停
  9. 如何找到CPU飙升的原因
  10. 《当时只道是寻常》——安意如——品纳兰容若《饮水词》
  11. 论文清单:一文梳理因果推理在自然语言处理中的应用
  12. svchost 总是占用网速 一招见效(实测)
  13. 退款java_APP支付 + 退款(JAVA实现)
  14. SGD(随机梯度下降)
  15. 计算机绘图软件应用于哪些领域,解答电脑绘图软件有哪些
  16. OCI动态链接ORACLE
  17. vsc 好用的插件
  18. element plus 引入icon
  19. 小白扫盲:浅谈web应用在nat123下的vip服务
  20. 康耐视智能相机IO操作笔记

热门文章

  1. pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
  2. android 底部弹框 BottomSheetDialog 的使用
  3. org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
  4. tar 和gzip 的区别
  5. pg_basebackup 配置 stream replication 异步/同步
  6. 管理员技术(六): 硬盘分区及格式化、 新建一个逻辑卷、调整现有磁盘的分区、扩展逻辑卷的大小、添加一个swap分区...
  7. 2022-2028年中国润滑油基础油行业市场研究及前瞻分析报告
  8. 计算机软件属于输入还是输出,计算机基本输入输出系统是什么意思(基本输入输出系统简介)...
  9. XCODE 6.1.1 配置GLFW
  10. Spring.Net Aop