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计算文本文件行数的方法
Jul 06 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
详解Python sys.argv使用方法
May 10 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 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中函数内引用全局变量的方法
2008/10/20 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
JSON对象转化为字符串详解
2017/08/11 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
详解vue中组件参数
2018/07/09 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
Django实现图片文字同时提交的方法
2015/05/26 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
Internet体系结构
2014/12/21 面试题
大学生实习思想汇报
2014/01/12 职场文书
教师档案管理制度
2014/01/23 职场文书
实习评语大全
2014/04/26 职场文书
护士找工作求职信
2014/07/02 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
教师先进个人材料
2014/12/17 职场文书
师德师风学习材料
2014/12/19 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
Python竟然能剪辑视频
2021/05/25 Python
Python语言规范之Pylint的详细用法
2021/06/24 Python
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏