Python图像阈值化处理及算法比对实例解析


Posted in Python onJune 19, 2020

图像的二值化或阈值化(Binarization)旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。

灰度转换处理后的图像中,每个像素都只有一个灰度值,其大小表示明暗程度。二值化处理可以将图像中的像素划分为两类颜色,常用的二值化算法如公式1所示:

{Y=0,gray<TY=255,gray>=T
{Y=0,gray<TY=255,gray>=T​

当灰度Gray小于阈值T时,其像素设置为0,表示黑色;当灰度Gray大于或等于阈值T时,其Y值为255,表示白色。

Python OpenCV中提供了阈值函数threshold()实现二值化处理,其公式及参数如下图所示:

retval, dst = cv2.threshold(src, thresh, maxval, type)

Python图像阈值化处理及算法比对实例解析

二进制阈值化

该方法先要选定一个特定的阈值量,比如127

1) 大于等于127的像素点的灰度值设定为最大值

2) 灰度值小于127的像素点的灰度值设置为0

例如: 156->255 89->0

关键字为cv2.THRESH_BINARY,完整代码如下

import cv2
def test22():
  src = cv2.imread("rose.jpg")
  # 灰度图片转换
  GrayImage = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
  # 二进制阈值化处理
  r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY)
  # 显示图像
  cv2.imshow("src", src)
  cv2.imshow("result", b)

  if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()
test22()

效果如下:

Python图像阈值化处理及算法比对实例解析

反二进制阈值化

该方法与二进制阈值化方法相似,先要选定一个特定的灰度值作为阈值,比如127

1) 大于127的像素点的灰度值设定为0

2) 小于该阈值的灰度值设定为255

例如:156->0 89->255

关键字为cv2.THRESH_BINARY_INV

代码如下:

import cv2
def test22():
  src = cv2.imread("rose.jpg")
  # 灰度图片转换
  GrayImage = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
  # 二进制阈值化处理
  r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV)
  # 显示图像
  cv2.imshow("src", src)
  cv2.imshow("result", b)

  if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()
test22()

效果如下:

Python图像阈值化处理及算法比对实例解析

截断阈值化

该方法需要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。

1) 大于等于127像素点的灰度值设定为该阈值127

2) 小于该阈值的灰度值不变

例如: 163-> 127 89->89

关键字cv2.THRESH_TRUNC,完整代码如下

import cv2
def test22():
  src = cv2.imread("rose.jpg")
  # 灰度图片转换
  GrayImage = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
  # 二进制阈值化处理
  r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TRUNC)
  # 显示图像
  cv2.imshow("src", src)
  cv2.imshow("result", b)

  if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()
test22()

效果如下:

Python图像阈值化处理及算法比对实例解析

反阈值化为0

该方法先选定一个阈值,比如127

(1) 大于等于阈值127的像素点变为0
(2) 小于该阈值的像素点值保持不变

例如: 128->0 89->89

关键字为cv2.THRESH_TOZERO_INV,完整代码如下:

import cv2
def test22():
  src = cv2.imread("rose.jpg")
  # 灰度图片转换
  GrayImage = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
  # 二进制阈值化处理
  r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO_INV)
  # 显示图像
  cv2.imshow("src", src)
  cv2.imshow("result", b)
  if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()
test22()

效果如下:

Python图像阈值化处理及算法比对实例解析

阈值为0

该方法先选定一个阈值,比如127

(1) 大于等于阈值127的像素点,值保持不变

(2) 小于该阈值的像素点值设置为0

例如: 163->163 102->0

关键字为cv2.THRESH_TOZERO,完整代码如下:

import cv2
def test22():
  src = cv2.imread("rose.jpg")
  # 灰度图片转换
  GrayImage = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
  # 二进制阈值化处理
  r, b = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO)
  # 显示图像
  cv2.imshow("src", src)
  cv2.imshow("result", b)

  if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()
test22()

效果如下:

Python图像阈值化处理及算法比对实例解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用python实现数据分析
Jan 11 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python实现NB-IoT模块远程控制
Jun 20 Python
浅谈django orm 优化
Aug 18 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
python 求10个数的平均数实例
Dec 16 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Pytorch 如何实现常用正则化
May 27 Python
OpenCV 之按位运算举例解析
Jun 19 #Python
Python实现ElGamal加密算法的示例代码
Jun 19 #Python
python 字符串的驻留机制及优缺点
Jun 19 #Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 #Python
Python应用实现处理excel数据过程解析
Jun 19 #Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 #Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 #Python
You might like
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
微信小程序聊天功能的示例代码
2020/01/13 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
python引用DLL文件的方法
2015/05/11 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
python中退出多层循环的方法
2018/11/27 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python学习笔记之多进程
2020/08/06 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
好邻里事迹材料
2014/01/16 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
社区党员干部承诺书
2015/05/04 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android