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发送伪造的arp请求
Jan 09 Python
使用Python对SQLite数据库操作
Apr 06 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
keras的三种模型实现与区别说明
Jul 03 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
Python如何操作docker redis过程解析
Aug 10 Python
Python根据字符串调用函数过程解析
Nov 05 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
Python破解极验滑动验证码详细步骤
May 21 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
python判断数字是否是超级素数幂
2018/09/27 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
Python线程指南分享
2019/11/19 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
中秋节礼品促销方案
2014/02/02 职场文书
销售冠军获奖感言
2014/02/03 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书