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 20 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
利用python画一颗心的方法示例
Jan 31 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Flask之请求钩子的实现
Dec 23 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
python处理csv数据的方法
2015/03/11 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python环境下安装opencv库的方法
2020/03/05 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python调用win32接口进行截图的示例
2020/11/11 Python
详解python中的异常和文件读写
2021/01/03 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
中专自我鉴定范文
2013/10/16 职场文书
内容编辑个人求职信
2013/12/10 职场文书
房屋租赁意向书
2014/04/01 职场文书
学生病假条范文
2015/08/17 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
python如何读取和存储dict()与.json格式文件
2022/06/25 Python