本文介绍使用不同的阈值方法“二值化”图像

固定阈值分割

图解

代码

import cv2 as cv# 读入灰度图像
img = cv.imread('baby_g.jpg', 0)# 阈值127分割图像
ret, th = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
cv.imshow('thresh', th)
cv.waitKey(0)
cv.destroyAllWindows()

函数讲解

cv.threshold()用来实现阈值分割,ret是return value缩写,代表当前的阈值,暂时不用理会。函数有4个参数:
参数1:要处理的原图,一般是灰度图
参数2:设定的阈值
参数3:最大阈值,一般为255
参数4:阈值的方式,主要有5种。

cv.threshold() 参数4阈值方式详解

实验

import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread('gradient.jpg',0)# 应用5种不同的阈值方法
ret, th1 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
ret, th2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY_INV)
ret, th3 = cv.threshold(img, 127, 255, cv.THRESH_TRUNC)
ret, th4 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO)
ret, th5 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO_INV)titles = ['Original', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, th1, th2, th3, th4, th5]# 使用Matplotlib显示
for i in range(6):plt.subplot(2, 3, i + 1)plt.imshow(images[i], 'gray')plt.title(titles[i], fontsize=8)plt.xticks([]), plt.yticks([])  # 隐藏坐标轴plt.show()

实验输出

官网中的说明

一点说明

很多人误以为阈值分割就是二值化。从上图中可以发现,两者并不等同,阈值分割结果是两类值,而不是两个值,所以教程开头我把二值化加了引号。

自适应阈值

简介及函数说明

看得出来固定阈值是在整幅图片上应用一个阈值进行分割,它并不适用于明暗分布不均的图片。 cv.adaptiveThreshold()自适应阈值会每次取图片的一小部分计算阈值,这样图片不同区域的阈值就不尽相同。它有5个参数:
参数1:要处理的原图
参数2:最大阈值,一般为255
参数3:小区域阈值的计算方式
ADAPTIVE_THRESH_MEAN_C:小区域内取均值
ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核
参数4:阈值方式(跟前面讲的那5种相同)
参数5:小区域的面积,如11就是11*11的小块
参数6:最终阈值等于小区域计算出的阈值再减去此值

实验

import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread('paojie_g.jpg',0)# 固定阈值
ret, th1 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
# 自适应阈值
th2 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 15, 4)
th3 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 15, 8)titles = ['Original', 'Global(v = 127)', 'Adaptive Mean', 'Adaptive Gaussian']
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], fontsize=8)plt.xticks([]), plt.yticks([])
plt.show()

实验结果

Otsu 阈值

原理及python手动实现

手动实现Otsu阈值法

实验

import cv2 as cv
import numpy as np# Read image
img = cv.imread("paojie_g.jpg",0)
# Otsu's binarization of Opencv
ret2,th2 = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
print("threshold >>", ret2)
# Save result
cv.imwrite("out.jpg", th2)
cv.imshow("result", th2)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果



都看到这里了,点个赞再走呗。

opencv 二值化图像详解 一文看懂各种二值化方法相关推荐

  1. 标准差详解-一文搞懂标准差的含义

    标准差详解-一文搞懂标准差的含义 转载自 样本标准差的意义是什么? 的第一个回答

  2. Spring AOP详解一文搞懂@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing

    文章目录 1.AOP是什么 2.AOP中注解的含义 3.Pointcut切入点的语法 4.AOP代码实现 1.AOP是什么 AOP:Aspect Oriented Programming,翻译过来就是 ...

  3. 纸鸢|物联协议只M-BUS详解一文即懂

    文章详细介绍了M-Bus仪表总线,包括总线结构.总线的通信协议,及其在远程抄表中的应用. 家用公共事业仪表通过扩展M-Bus总线,使其具有与M-Bus仪表总线通讯的功能,从而实现远程抄表. 介绍 M- ...

  4. Google BERT原理详解 一文读懂BERT

    理论: https://zhuanlan.zhihu.com/p/46652512 https://www.cnblogs.com/anai/p/11645953.html https://blog. ...

  5. OpenCV实战(10)——积分图像详解

    OpenCV实战(10)--积分图像详解 0. 前言 1. 积分图像计算 2. 自适应阈值 2.1 固定阈值的缺陷 2.2 使用自适应阈值 2.3 其它自适应阈值计算方法 2.4 完整代码 3. 使用 ...

  6. 组件化实践详解(二)

    在上一篇文章<组件化实践详解(一)>中我们介绍了组件化实践的目标和实践步骤,本文继续说说关于组件化实践遇到的问题及思考. 1.组件内的架构设计 这条本来我是不想写的,但是很多组件化的文章里 ...

  7. 海康工业相机SDK+OpenCV实例(2):RawDataFormatConvert详解

    海康工业相机SDK+OpenCV实例(2): RawDataFormatConvert详解 文章目录 海康工业相机SDK+OpenCV实例(2): RawDataFormatConvert详解 前言 ...

  8. Hadoop Mapreduce分区、分组、二次排序过程详解

    2019独角兽企业重金招聘Python工程师标准>>> 1.MapReduce中数据流动    (1)最简单的过程:  map - reduce    (2)定制了partition ...

  9. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2)定制了partitioner以将map的结果送往指定reducer的过程: map - par ...

  10. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

最新文章

  1. jsp页面其本质就是一个servlet
  2. java jar包详解_Jar打包用法详解
  3. Spark SQL在携程的实践经验分享
  4. 【原型设计】第二节:Axure RP9制作自己的元件库的操作教程
  5. 从市场角度看服务器虚拟化
  6. uni-app插入本地背景图片不能超过40kb解决方法
  7. 修改html本地样式,html-如何通过Javascript更改CSS类样式?
  8. schedule和scheduleAtFixedRate
  9. 【MFC】黑马程序员MFC教程--基础篇
  10. ssm房屋租赁管理系统ssm房屋管理系统JSP网上租房系统JSP房产信息网站房屋租赁系统房屋
  11. 进阶之路 | 奇妙的Activity之旅
  12. 一年经验Java面试之MySQL事务隔离级别和MVCC
  13. 百度地图 变黑问题 解决方法
  14. Xcode 10.1 安装模拟器无反应:点击create 无反应
  15. Win10 22H2更新时间 Win10 22H2怎么更新
  16. 计算机显示器模糊,电脑显示器模糊是怎么回事?
  17. 筑基九层 —— 指针详解
  18. linux开机启动出现grup,开机出现grub解决方法
  19. 常见API、正则表达式、Lanbda、算法
  20. [存储-测试工具]vdbench文件测试随机IO混合读写配置模板

热门文章

  1. 唐宇迪机器学习课程笔记:随机森林
  2. smartadmin mysql_SmartAdmin 一套基于SpringBoot和Vue前后端分离的互联网企业级的通用型中后台解决方案...
  3. java项目中用到的solr_Solr的原理及在项目中的使用实例.
  4. 使用yarn创建react项目报node_modules\core-js-pure: Command failed错误
  5. 使用阿里云加速器 配置 Docker 镜像加速器
  6. Android字体设置,Roboto字体使用
  7. linux安装文泉驿字体,centos 安装文泉驿字体教程,centos文泉驿字体下载字体(URL:h...
  8. 结合spring IOC AOP Mybatis写一个简易的银行转账案例
  9. charset参数 sqluldr2_SQLULDR2
  10. 2017锤子科技发布会