python图像处理二值化方法

在用python进行图像处理时,二值化是非常重要的一步,现总结了自己遇到过的 6种 图像二值化的方法(当然这个绝对不是全部的二值化方法,若发现新的方法会继续新增)。

1. opencv 简单阈值 cv2.threshold

2. opencv 自适应阈值 cv2.adaptiveThreshold (自适应阈值中计算阈值的方法有两种:mean_c 和 guassian_c ,可以尝试用下哪种效果好)

3. Otsu's 二值化

例子:

来自 : OpenCV-Python 中文教程

  1. import cv2
  2. import numpy as np
  3. from matplotlib import pyplot as plt
  4.  
  5. img = cv2.imread('scratch.png', 0)
  6. # global thresholding
  7. ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
  8. # Otsu's thresholding
  9. th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
  10. # Otsu's thresholding
  11. # 阈值一定要设为 0 !
  12. ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
  13. # plot all the images and their histograms
  14. images = [img, 0, th1, img, 0, th2, img, 0, th3]
  15. titles = [
  16. 'Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)',
  17. 'Original Noisy Image', 'Histogram', "Adaptive Thresholding",
  18. 'Original Noisy Image', 'Histogram', "Otsu's Thresholding"
  19. ]
  20. # 这里使用了 pyplot 中画直方图的方法, plt.hist, 要注意的是它的参数是一维数组
  21. # 所以这里使用了( numpy ) ravel 方法,将多维数组转换成一维,也可以使用 flatten 方法
  22. # ndarray.flat 1-D iterator over an array.
  23. # ndarray.flatten 1-D array copy of the elements of an array in row-major order.
  24. for i in range(3):
  25. plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray')
  26. plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([])
  27. plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256)
  28. plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([])
  29. plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray')
  30. plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([])
  31. plt.show()

结果图:

4. skimage niblack阈值

5. skimage sauvola阈值 (主要用于文本检测)

例子:

https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_niblack_sauvola.html

  1. import matplotlib
  2. import matplotlib.pyplot as plt
  3.  
  4. from skimage.data import page
  5. from skimage.filters import (threshold_otsu, threshold_niblack,
  6. threshold_sauvola)
  7.  
  8. matplotlib.rcParams['font.size'] = 9
  9.  
  10. image = page()
  11. binary_global = image > threshold_otsu(image)
  12.  
  13. window_size = 25
  14. thresh_niblack = threshold_niblack(image, window_size=window_size, k=0.8)
  15. thresh_sauvola = threshold_sauvola(image, window_size=window_size)
  16.  
  17. binary_niblack = image > thresh_niblack
  18. binary_sauvola = image > thresh_sauvola
  19.  
  20. plt.figure(figsize=(8, 7))
  21. plt.subplot(2, 2, 1)
  22. plt.imshow(image, cmap=plt.cm.gray)
  23. plt.title('Original')
  24. plt.axis('off')
  25.  
  26. plt.subplot(2, 2, 2)
  27. plt.title('Global Threshold')
  28. plt.imshow(binary_global, cmap=plt.cm.gray)
  29. plt.axis('off')
  30.  
  31. plt.subplot(2, 2, 3)
  32. plt.imshow(binary_niblack, cmap=plt.cm.gray)
  33. plt.title('Niblack Threshold')
  34. plt.axis('off')
  35.  
  36. plt.subplot(2, 2, 4)
  37. plt.imshow(binary_sauvola, cmap=plt.cm.gray)
  38. plt.title('Sauvola Threshold')
  39. plt.axis('off')
  40.  
  41. plt.show()

结果图:

6. IntegralThreshold (主要用于文本检测)

使用方法: 运行下面网址的util.py文件

https://github.com/Liang-yc/IntegralThreshold

结果图:

7.

python 图像处理中二值化方法归纳总结的更多相关文章

  1. Python实现熵值法确定权重

    本文从以下四个方面,介绍用Python实现熵值法确定权重: 一. 熵值法介绍 二. 熵值法实现 三. Python实现熵值法示例1 四. Python实现熵值法示例2 一. 熵值法介绍 熵值法是计算指 ...

  2. 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(转)

    转自: https://zhuanlan.zhihu.com/p/22252270    ycszen 另可参考: https://blog.csdn.net/llx1990rl/article/de ...

  3. 《零压力学Python》 之 第二章知识点归纳

    第二章(数字)知识点归纳 要生成非常大的数字,最简单的办法是使用幂运算符,它由两个星号( ** )组成. 如: 在Python中,整数是绝对精确的,这意味着不管它多大,加上1后都将得到一个新的值.你将 ...

  4. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  5. Python图像处理库:Pillow 初级教程

    Python图像处理库:Pillow 初级教程 2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html ...

  6. 使用Python,字标注及最大熵法进行中文分词

    使用Python,字标注及最大熵法进行中文分词 在前面的博文中使用python实现了基于词典及匹配的中文分词,这里介绍另外一种方法, 这种方法基于字标注法,并且基于最大熵法,使用机器学习方法进行训练, ...

  7. Python图像处理之验证码识别

      在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract ...

  8. Python的生成器进阶玩法

    Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...

  9. Python字典按值排序的方法

    Python字典按值排序的方法: 法1: (默认升序排序,加  reverse = True 指定为降序排序) # sorted的结果是一个list dic1SortList = sorted( di ...

随机推荐

  1. 2019 年百度之星—初赛一 B题 Game

    题目链接 题意:最开始可以选择任意位置,在一个坐标轴上,依次走到一个区间里面,可以选择走一步两步,求最小步数. 思路:贪心,刚开始合并区间,确定初始位置以及方向.往右走肯定到左端点,往左走先到右端点, ...

  2. 前端每日实战:6# 视频演示如何用纯 CSS 绘制一颗闪闪发光的璀璨钻石

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/qYqwQp 可交互视频教程 此视频是可以交 ...

  3. HttpClient配置及示例代码

    HttpComponents是Apache 旗下的项目.其中有一个HttpClient,即HTTP客户端. ... ... 大多时候我们只需要HttpClient,httpCore是开发服务端的我们可 ...

  4. spring-cloud zuul网关

    API Gateway 是随着微服务(Microservice)这个概念一起兴起的一种架构模式,它用于解决微服务过于分散,没有一个统一的出入口进行流量管理的问题. 使用 Zuul 实现 API Gat ...

  5. WebService-.Net:添加web引用和添加服务引用有什么区别?

    ylbtech-WebService-.Net:添加web引用和添加服务引用有什么区别? 1.返回顶部 1. 添加web引用和添加服务引用有什么区别,Add Service References 和 ...

  6. Installing Symfony project with PHP 7.3 version

    参考地址:https://cmsdk.com/php/installing-symfony-project-with-php-7-3-version.html Tryng to install (an ...

  7. HTML--JS 9*9乘法口诀

    <html> <head> <title>9*9乘法口诀</title> <script language="JavaScript&qu ...

  8. (appium+python)UI自动化_10_adb常用命令

    前言 adb(Android Debug Bridge)工具是android-sdk里的一个工具,是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在app自动化测试过程中,有时要用到adb命 ...

  9. 字符串模式匹配算法系列(二):KMP算法

    算法背景: KMP算法是由Donald Knuth和Vaughan Pratt于1970年共同提出的,而James H.Morris也几乎同时间独立提出了这个算法.因此人们将其称作“克努特-莫里斯-普 ...

  10. SQLServer2008查询时对象名无效

    情况一:如果表名是关键字,查询时把表名括起来,不作为关键字使用 情况二:看左上角显示的是否是master,这是数据库的默认系统库,点选这个改成自己的即可