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 正则式 概述及常用字符
May 07 Python
Python深入学习之闭包
Aug 31 Python
python通过yield实现数组全排列的方法
Mar 18 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
python中zip()方法应用实例分析
Apr 16 Python
Python程序中的观察者模式结构编写示例
May 27 Python
Python按行读取文件的简单实现方法
Jun 22 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python常见字典内建函数用法示例
May 14 Python
Python 列表去重去除空字符的例子
Jul 20 Python
如何表示python中的相对路径
Jul 08 Python
pytest进阶教程之fixture函数详解
Mar 29 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 foreach、while性能比较
2009/10/15 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
各个系统下的Python解释器相关安装方法
2015/10/12 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
简单了解django orm中介模型
2019/07/30 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
详解nginx进程锁的实现
2021/06/14 Servers