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实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
Saltstack快速入门简单汇总
Mar 01 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Flask框架工厂函数用法实例分析
May 25 Python
python爬虫要用到的库总结
Jul 28 Python
python help函数实例用法
Dec 06 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
python单向链表实例详解
May 25 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
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
学习经验交流会主持词
2014/04/01 职场文书
新学期开学标语
2014/06/30 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2015年女生节活动总结
2015/02/27 职场文书
保安辞职信范文
2015/02/28 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers