Python图像处理二值化方法实例汇总


Posted in Python onJuly 24, 2020

在用python进行图像处理时,二值化是非常重要的一步,现总结了自己遇到过的6种 图像二值化的方法(当然这个绝对不是全部的二值化方法,若发现新的方法会继续新增)。

1. opencv 简单阈值 cv2.threshold

2. opencv 自适应阈值 cv2.adaptiveThreshold (自适应阈值中计算阈值的方法有两种:mean_c 和 guassian_c ,可以尝试用下哪种效果好)

3. Otsu's 二值化

例子:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('scratch.png', 0)
# global thresholding
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# Otsu's thresholding
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# Otsu's thresholding
# 阈值一定要设为 0 !
ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1, img, 0, th2, img, 0, th3]
titles = [
  'Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)',
  'Original Noisy Image', 'Histogram', "Adaptive Thresholding",
  'Original Noisy Image', 'Histogram', "Otsu's Thresholding"
]
# 这里使用了 pyplot 中画直方图的方法, plt.hist, 要注意的是它的参数是一维数组
# 所以这里使用了( numpy ) ravel 方法,将多维数组转换成一维,也可以使用 flatten 方法
# ndarray.flat 1-D iterator over an array.
# ndarray.flatten 1-D array copy of the elements of an array in row-major order.
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()

结果图:

Python图像处理二值化方法实例汇总

4. skimage niblack阈值

5. skimage sauvola阈值 (主要用于文本检测)

例子:

https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_niblack_sauvola.html

import matplotlib
import matplotlib.pyplot as plt

from skimage.data import page
from skimage.filters import (threshold_otsu, threshold_niblack,
               threshold_sauvola)


matplotlib.rcParams['font.size'] = 9


image = page()
binary_global = image > threshold_otsu(image)

window_size = 25
thresh_niblack = threshold_niblack(image, window_size=window_size, k=0.8)
thresh_sauvola = threshold_sauvola(image, window_size=window_size)

binary_niblack = image > thresh_niblack
binary_sauvola = image > thresh_sauvola

plt.figure(figsize=(8, 7))
plt.subplot(2, 2, 1)
plt.imshow(image, cmap=plt.cm.gray)
plt.title('Original')
plt.axis('off')

plt.subplot(2, 2, 2)
plt.title('Global Threshold')
plt.imshow(binary_global, cmap=plt.cm.gray)
plt.axis('off')

plt.subplot(2, 2, 3)
plt.imshow(binary_niblack, cmap=plt.cm.gray)
plt.title('Niblack Threshold')
plt.axis('off')

plt.subplot(2, 2, 4)
plt.imshow(binary_sauvola, cmap=plt.cm.gray)
plt.title('Sauvola Threshold')
plt.axis('off')

plt.show()

结果图:

Python图像处理二值化方法实例汇总

6.IntegralThreshold(主要用于文本检测)

使用方法: 运行下面网址的util.py文件

https://github.com/Liang-yc/IntegralThreshold

结果图:

Python图像处理二值化方法实例汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 获取文件列表(或是目录例表)
Mar 25 Python
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
深入解析Python中的WSGI接口
May 11 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
Python List cmp()知识点总结
Feb 18 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
Elasticsearch 数据类型及管理
Apr 19 Python
Python如何合并多个字典或映射
Jul 24 #Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 #Python
Python3.7安装pyaudio教程解析
Jul 24 #Python
python调用私有属性的方法总结
Jul 24 #Python
python中取绝对值简单方法总结
Jul 24 #Python
python代码能做成软件吗
Jul 24 #Python
深入了解Python 变量作用域
Jul 24 #Python
You might like
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
Python二分查找详解
2015/09/13 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
加拿大最大的书店:Indigo
2017/01/01 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
销售个人求职信范文
2014/04/28 职场文书
学习经验演讲稿
2014/05/10 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2014年大学生工作总结
2014/11/20 职场文书
见义勇为事迹材料
2014/12/24 职场文书
施工员岗位职责范本
2015/04/11 职场文书
预备党员介绍人意见
2015/06/01 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
导游词之无锡唐城
2019/12/12 职场文书