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关闭windows进程的方法
Apr 18 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
python3大文件解压和基本操作
Dec 15 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python+Splinter实现12306抢票功能
Sep 25 Python
利用python循环创建多个文件的方法
Oct 25 Python
Python实现Selenium自动化Page模式
Jul 14 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
教你用python控制安卓手机
May 13 Python
Python基础教程,Python入门教程(超详细)
Jun 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
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
详解javascript void(0)
2020/07/13 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
基于DataFrame改变列类型的方法
2018/07/25 Python
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
初中学习计划书范文
2014/09/15 职场文书
法人委托书范本格式
2014/09/15 职场文书
小学优秀教师材料
2014/12/15 职场文书
承诺函范文
2015/01/21 职场文书
施工员岗位职责
2015/02/10 职场文书
放假通知怎么写
2015/08/18 职场文书
python基础之文件处理知识总结
2021/05/23 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python