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将字符串转换成数组的方法
Apr 29 Python
Python过滤列表用法实例分析
Apr 29 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
python实现的Iou与Giou代码
Jan 18 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
python 实现汉诺塔游戏
Nov 28 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 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利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
JS实现放大镜效果
2020/09/21 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
python动态加载变量示例分享
2014/02/17 Python
Python实现Linux中的du命令
2017/06/12 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
python3学生名片管理v2.0版
2018/11/29 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
项目采购员岗位职责
2014/04/15 职场文书
股份合作协议书
2014/09/10 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
2015国庆节感想
2015/08/04 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书