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中用split()方法分割字符串的使用介绍
May 20 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python进程间通信之共享内存详解
Oct 30 Python
Django Rest framework之认证的实现代码
Dec 17 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
Python装饰器用法与知识点小结
Mar 09 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
python学习笔记之多进程
Aug 06 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 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 面向对象的一个例子
2011/04/12 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
详解vue组件通信的三种方式
2017/06/30 Javascript
js实现购物车功能
2018/06/12 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
python range实例用法分享
2020/02/06 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
森林病虫害防治方案
2014/06/02 职场文书
经济国贸专业求职信
2014/06/18 职场文书
老员工辞职信范文
2015/05/12 职场文书
CAD实训总结范文
2015/08/03 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python