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中操作字符串之startswith()方法的使用
May 20 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
Python面向对象封装操作案例详解
Dec 31 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
django为Form生成的label标签添加class方式
May 20 Python
Python如何对齐字符串
Jul 30 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
关于python类SortedList详解
Sep 04 Python
python解析json数据
Apr 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使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
js单例模式详解实例
2013/11/21 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
python类定义的讲解
2013/11/01 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python二进制文件的转译详解
2019/07/03 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
会议邀请函范文
2014/01/09 职场文书
劳模事迹材料范文
2014/12/24 职场文书
借条格式范本
2015/05/25 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS