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之复习if语句
Oct 02 Python
Python实用日期时间处理方法汇总
May 09 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Python 画出来六维图
Jul 26 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
用Python进行栅格数据的分区统计和批量提取
May 27 Python
python开发的自动化运维工具ansible详解
Aug 07 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下保存远程图片到本地的办法
2010/08/08 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
Python正则表达式知识汇总
2017/09/22 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
《水乡歌》教学反思
2014/04/24 职场文书
政府门卫岗位职责
2014/04/29 职场文书
书香校园建设方案
2014/05/02 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js