对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一。例如,灰度大于127的图像设置为1、小于127的设置为0,这种处理便是固定阈值127的二值化处理。

自适应的二值化处理不同于固定阈值的处理,每个像素的阈值依赖于其邻近的像素灰度,为了得到(x,y)点的阈值T(x,y),我们需要进行以下处理。

  1. 在此像素周边选取一个bxb的区域,其中了是用户指定的。
  2. 计算此bxb区域的加权平均值。OpenCV提供了两种方法计算此加权均值,一种是算术平均法,另一种是高斯加权平均法,后者要计算均值时距离区域中心越近权重越大。我们将得到的加权均值计为WA(x,y)
  3. 将上述加权均值与一固定参数相减得到阈值T(x,y),此固定参数设为param1,则(x,y)点的阈值可以用下式进行计算: 
    T(x,y)=WA(x,y)-param1

这便是得到阈值的过程,下面我们在利用OpenCV库编程实现固定阈值和自适应阈值的方法,我将在IPython环境下实现。

导入必要的模块

%pylab
import cv2
  • 1
  • 2
  • 1
  • 2

读取图像

读取图像,并把图像转换为灰度图像并显示之。

im = imread("/home/bikz05/Desktop/image.jpg")
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
axis("off")
title("Input Image")
imshow(im_gray, cmap="gray")
show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

固定阈值二值化

我们首先进行固定阈值二值化处理,固定阈值二值化处理利用cv2.threshold函数,此函数的原型为:

cv2.threshold(src, thresh, maxval, type[, dst]) -> retval, dst
  • 1
  • 1

其中:

  1. src 为输入图像;
  2. thresh 为阈值;
  3. maxval 为输出图像的最大值;
  4. type 为阈值的类型;
  5. dst 为目标图像。

此例中我们将阈值设置为50,阈值类型为cv2.THRESH_BINARY,则灰度在大于50的像素其值将设置为255,其它像素设置为0。

retval, im_at_fixed = cv2.threshold(im_gray, 50, 255, cv2.THRESH_BINARY)
axis("off")
title("Fixed Thresholding")
imshow(im_at_fixed, cmap = 'gray')
show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

效果如下:

算术平法的自适应二值化

算术平均法的自适应二值化利用cv2.adaptiveThreshold实现,此函数的原型为:

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst
  • 1
  • 1

其中:

  1. src 为输入图像;
  2. maxval 为输出图像的最大值;
  3. adaptiveMethod 设置为cv2.ADAPTIVE_THRESH_MEAN_C表示利用算术均值法,设置为cv2.ADAPTIVE_THRESH_GAUSSIAN_C表示用高斯权重均值法;
  4. thresholdType: 阈值的类型;
  5. blockSize: b的值;
  6. C 为从均值中减去的常数,用于得到阈值;
  7. dst 为目标图像。

此例中我们将b设置为5,常数设置为10。

im_at_mean = cv2.adaptiveThreshold(im_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 10)
axis("off")
title("Adaptive Thresholding with mean weighted average")
imshow(im_at_mean, cmap = 'gray')
show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

得到的结果如下图所示:

高斯加权均值法自适应二值化

高斯加权均值法自适应二值化也是利用cv2.adaptiveThreshold, 此函数的原型与上述相同:

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst
  • 1
  • 1

其中:

  1. src 为输入图像;
  2. maxval 为输出图像的最大值;
  3. adaptiveMethod 设置为cv2.ADAPTIVE_THRESH_MEAN_C表示利用算术均值法,设置为cv2.ADAPTIVE_THRESH_GAUSSIAN_C表示用高斯权重均值法;
  4. thresholdType: 阈值的类型;
  5. blockSize: b的值;
  6. C 为从均值中减去的常数,用于得到阈值;
  7. dst 为目标图像。
im_at_mean = cv2.adaptiveThreshold(im_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 7)
axis("off")
title("Adaptive Thresholding with gaussian weighted average")
imshow(im_at_mean, cmap = 'gray')
show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

处理结果如下:

就这么简单,显然自适应方法要比固定阈值的方法效果更好

利用python opencv实现图像自适应二值化相关推荐

  1. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  2. 图像的二值化之python+opencv

    定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用 ...

  3. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  4. opencv自适应二值化原理

    opencv自适应二值化原理 先对图像做模糊处理(一般是均值或者高斯模糊).(这里可以加上自己的操作,做一些其他类型的模糊以及一些形态学的操作). 用原图与模糊处理之后的图像做差得到一幅图像. 判断图 ...

  5. Python图像的二值化

    什么是图像二值化 在认识二值化前,我们先简单介绍一下几个概念: 彩色图像 彩色图像有blue,green,red三个通道,取值范围均为0-255 灰度图 灰度图:只有一个通道,取值范围在0-255,所 ...

  6. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

    9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...

  7. 【OpenCV图像处理】二、图像的二值化操作

    图像的逻辑运算就是将两幅图像的对应像素进行逻辑运算.逻辑运算主要包括 与(AND)或(OR)及补运算.要对灰度图像进行逻辑运算,就要首先对图像进行二值化处理. 二值化的公式如下: 我们对灰度图像进行二 ...

  8. 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充

    9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...

  9. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

最新文章

  1. 找不到或无法加载主类的原因之一
  2. nylgacm_1057_寻找最大数(三)
  3. springboot学习笔记(四)
  4. 敏捷回顾会议的套路与实践分享
  5. 广度优先搜索(BFS)
  6. 关于如何收集,标准化和集中化处理Golang日志的一些建议
  7. 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
  8. java calendar 2月份_Java Calendar类使用总结
  9. OpenInfra中国日志愿者第三次会议召开
  10. mantelhean.test r语言_Meta分析常用教程:R语言
  11. anaconda版本选择_Anaconda简介
  12. 如何抢功,甩锅,立于不败之地???
  13. MySQL篇【5】——约束
  14. 天载配资解析天赐材料:目标180
  15. 苏州微软面试--机器学习自然语言处理
  16. Huawei/华为WATCH GT2e智能手表,包邮免费送!
  17. 一元一个脱单盲盒,“线上月老”是门赚钱的好生意吗?
  18. 【python小课堂专栏】python小课堂11 - 变量篇
  19. 使用Easyar在unity制作ar视频黑屏
  20. 如何快速开发出一个高质量的APP

热门文章

  1. curl 慢 不稳定_慢病毒包装步骤及注意事项
  2. 自动清理归档日志_Oracle重做日志和日志挖掘
  3. git 命令简单总结
  4. java web filter标签是什么,Java Web:5.Filter
  5. python 二叉树中所有距离为k的节点_leetcode 二叉树中所有距离为 K 的结点
  6. mysql 数据怎么导出_mysql怎么导出数据
  7. java textview多行_java-Android在textview中多个可点击的字符串
  8. 雷军做程序员时写的文章,太牛了!
  9. 皮一皮:内涵了...
  10. Nacos 2.0的Spring Boot Starter来了!