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使用xmlrpc实例讲解
Dec 17 Python
Python实现处理管道的方法
Jun 04 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
python scp 批量同步文件的实现方法
Jan 03 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
Pytorch释放显存占用方式
Jan 13 Python
pycharm 关掉syntax检查操作
Jun 09 Python
Jupyter Notebook安装及使用方法解析
Nov 12 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处理带有中文URL的方法
2016/07/11 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
Python操作串口的方法
2015/06/17 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python检测数据类型的方法总结
2019/05/20 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
小学感恩主题班会
2015/08/12 职场文书
国庆节主题班会
2015/08/15 职场文书
推普标语口号大全
2015/12/26 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
Python入门之基础语法详解
2021/05/11 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
新手初学Java List 接口
2021/07/07 Java/Android