threshold函数

retval, dst = cv2.threshold(src, thresh, maxval, type)

'''

retval:返回的阈值;dst:阈值分割结果图像

src:输入图像

thresh:阈值;maxval:需设定的最大值

type:阈值分割类型

'''

简单的阈值分割类型有:

cv.THRESH_BINARY

cv.THRESH_BINARY_INV

cv.THRESH_TRUNC

cv.THRESH_TOZERO

cv.THRESH_TOZERO_INV

1 import matplotlib.pyplot as plt

2 import numpy as np

3 import cv2 as cv

4

5 img = cv.imread(r'Lena.png')

6 imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

7 t1, rst1 = cv.threshold(imgray,127,255,cv.THRESH_BINARY) # 二值化阈值处理。大于127的像素点会被处理为255,其余处理为0

8 t2, rst2 = cv.threshold(imgray,127,255,cv.THRESH_BINARY_INV) # 反二值化阈值处理。灰度值大于127的像素点处理为0,其余为255

9 t3, rst3 = cv.threshold(imgray,127,255,cv.THRESH_TRUNC) # 截断阈值化处理。大于127的像素点处理为127,其余保持不变

10 t4, rst4 = cv.threshold(imgray,127,255,cv.THRESH_TOZERO_INV) # 超阈值零处理。大于127的像素点处理为0,其余保持不变

11 t5, rst5 = cv.threshold(imgray,127,255,cv.THRESH_TOZERO) # 低阈值零处理。大于127的像素点保持不变,其余处理为0

12 titles = ['Original','BINARY','BINARY_INV','TRUNC','TOZERO_INV','TOZERO']

13 images = [imgray,rst1,rst2,rst3,rst4,rst5]

14 for i in range(6):

15 plt.subplot(2,3,i+1), plt.imshow(images[i],'gray')

16 plt.title(titles[i])

17 plt.xticks([]), plt.yticks([])

18 plt.show()

效果图

自适应阈值处理

上述阈值处理对于色彩均衡的图像来说结果较为理想,但对于色彩不均衡的图像来说,只使用一个阈值,无法得到较理想的阈值分割结果。自适应阈值处理通过计算每个像素点周围临近的加权平均值获得阈值,能够更好的处理由光照变化带来影响的图像。

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

'''

src:输入图像。该图像须是8位单通道图像

maxValue:最大值

adaptiveMethod:自适应方法

thresholdType:阈值处理方式

blockSize:像素在计算其阈值时参考的邻域尺寸大小,通常为3,5,7

C:常量

'''

阈值处理方法须为 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV

自适应方法有 cv2.ADAPTIVE_THRESH_MEAN_C 和 cv2.ADAPTIVE_THRESH_GAUSSIAN_C 。前者领域所有像素点的权重值一致;后者与邻域各个像素点到中心点的距离有关,通过高斯方程获得各点的权重。

1 import matplotlib.pyplot as plt

2 import numpy as np

3 import cv2 as cv

4

5 img = cv.imread(r'exc.png')

6 imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

7 t, rst = cv.threshold(imgray,127,255,cv.THRESH_BINARY)

8 athdMEAN = cv.adaptiveThreshold(imgray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,5,3)

9 athdGAUS = cv.adaptiveThreshold(imgray,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,5,3)

10 titles = ['Original','Glbal Thresholding(v=127)','AdaptiveMean','AdaptiveGaussian']

11 images = [imgray,rst,athdMEAN,athdGAUS]

12 for i in range(4):

13 plt.subplot(2,2,i+1)

14 plt.imshow(images[i],'gray')

15 plt.title(titles[i])

16 plt.xticks([]), plt.yticks([])

17 plt.show()

对一幅图像分别使用二值化阈值处理和自适应阈值处理,效果图:

Otsu处理(大津法)

当我们有一个图像,其像素值矩阵如下矩阵时,此时将阈值设置为127时阈值处理的结果是失败的。

但我们并不能观察出最合适的阈值,Otsu处理能够根据图像给出最佳的分割阈值。

通过在函数 cv2.threshold() 中对 type 的类型多传递一个参数 cv2.THRESH_OTSU 即可实现Otsu。

注意在使用Otsu处理时需将阈值设为0。

1 import numpy as np

2 import cv2 as cv

3

4 img = np.zeros((5,5),dtype=np.uint8)

5 img[0:2,0:5] = 123

6 img[2:5,0:5] = 126

7 print('img=\n', img)

8 t1, thd = cv.threshold(img,127,255,cv.THRESH_BINARY)

9 t2, otsu = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)

10 print('thd=\n', thd)

11 print('otsu=\n', otsu)

对上述像素矩阵进行直观处理

另外Otsu处理也返回了最佳阈值,上述该阈值为 t2 = 123。

otsu java,opencv阈值处理--threshold函数、自适应阈值处理、Otsu处理(大津法)相关推荐

  1. 【opencv-python】大津法(Otsu)阈值分割原理深入分析

    大津法(Otsu)是图像处理领域里面较为重要的阈值分割方法,适用于处理双峰图像.但大多数开发人员并不熟悉其原理,因此有必要对其进行详细说明与分析. opnecv的实例代码链接为: opencv-pyt ...

  2. opencv阈值处理-threshold函数、自适应阈值处理和Ostu处理

    阈值处理是指剔除图像内像素值高于一定值或者低于一定值的像素点.例如设置阈值为125,则大于125的像素点的值设为255,小于125的设为0. 一.threshold函数 open cv3.0使用cv2 ...

  3. 【笔记】opencv阈值处理 threshold函数 cv2.THRESH_BINARY ,cv2.THRESH_TRUNC) cv2.adaptiveThreshold()

    像素是在模拟图像数字化时对连续空间进行离散化得到的.每个像素具有整数行(高)和列(宽)位置坐标,同时每个像素都具有整数灰度值或颜色值. threshold函数 返回的第一个参数为阈值,第二个为结果图像 ...

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

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

  5. 自适应阈值分割—大津法(OTSU算法)C++实现

    转自:https://blog.csdn.net/dcrmg/article/details/52216622 大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命 ...

  6. Learn OpenCV ---- 大津法(Otsu‘s)阈值

    阅读原文 大津法(Otsu's)阈值 什么是图像阈值 图像阈值与图像分割 大津(Otsu)算法 什么是图像阈值 图像阈值化是一种基于像素强度大图像二值化方法.这种方法的输入通常是一个灰度图和一个阈值, ...

  7. java大津法确定阈值,大津法得到自适应阈值

    大津法是一种能得到自适应阈值的方法,参考下面的博客 matlab代码修改完善后如下 function [ grayThresh ] = myotsu( GrayIm ) % 使用大津法求动态灰度阈值 ...

  8. 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

  9. otsu阈值分割算法原理_大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

最新文章

  1. win10下gnuplot的安装和使用
  2. CMD中使用attrib命令设置文件只读、隐藏属性详解
  3. 从RocketMQ看长轮询(Long Polling)
  4. Logstash 安装及简单实用(同步MySql数据到Elasticsearch)
  5. 递归用函数、存储过程实现的效果
  6. Adobe illustrator 排版后图形导出 - 连载 3
  7. usb接口 spec_USB连接器发展演变和趋势
  8. 分布式系统中的幂等设计
  9. 前端系统化学习【JS篇】:(三)Javascript中的命名规范
  10. LeetCode 49 - Group Anagram 归类同构字
  11. Java学习笔记——StringBuffer类
  12. 强大视频电影播放软件——乐鱼影音盒!
  13. U盘不能复制超过4G的文件解决方法
  14. 2. Python decorate
  15. 愚你相遇,好幸运:遇见你,遇见了最好的自己
  16. TCP/IP详解(二)数据链路层
  17. 大唐天下平台模式开发
  18. 前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。
  19. 动态规划 HDU 1493 QQpet
  20. 【修真院“善良”系列之十八】WEB程序员从零开始到就业的全资料V1.0——只看这一篇就够了!

热门文章

  1. c++ for_each 用法
  2. 【机器学习百问】10.A/B测试中如何划分实验组和对照组
  3. Android WebService 客户端 之 andriod ksoap2 WebService 复杂对象参数
  4. [elk]elastalert邮箱告警
  5. Sanctum打造区块链领域的伯克希尔哈撒韦
  6. 服务器运行matlab代码
  7. 基于JavaWeb的汽车销售管理系统设计与实现 项目源码及数据库文件+论文
  8. C++多态之虚析构与纯虚析构
  9. C语言类型数据所占字节数
  10. chrome edge浏览器支持chatGPT3.5/chatGPT4.0