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使用post提交数据到远程url的方法
Apr 29 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
分析Python读取文件时的路径问题
Feb 11 Python
python给微信好友定时推送消息的示例
Feb 20 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
Python中实现输入一个整数的案例
May 03 Python
python控制台打印log输出重复的解决方法
May 14 Python
python 多态 协议 鸭子类型详解
Nov 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设计模式 Prototype (原型模式)代码
2011/06/26 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
laravel学习教程之关联模型
2016/07/30 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
原生js获取left值和top值的三种方法
2017/08/02 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
Vue3为什么这么快
2020/09/23 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
Python日志器使用方法及原理解析
2020/09/27 Python
英国景点门票网站:attractiontix
2019/08/27 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
电子商务专业个人的自我评价分享
2013/10/29 职场文书
司机的工作范围及职责
2013/11/13 职场文书
相亲活动方案
2014/08/26 职场文书
企业员工辞职信范文
2015/05/12 职场文书
新闻稿标题
2015/07/18 职场文书
如何在Python项目中引入日志
2021/05/31 Python
Python实现的扫码工具居然这么好用!
2021/06/07 Python
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
实现GO语言对数组切片去重
2022/04/20 Golang