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中的多重继承实例讲解
Sep 28 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Django验证码的生成与使用示例
May 20 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python+flask实现API的方法
Nov 21 Python
pandas中的series数据类型详解
Jul 06 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Python列表解析操作实例总结
Feb 26 Python
python实现图片素描效果
Sep 26 Python
详解python的异常捕获
Mar 03 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
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
javascript基本语法分析说明
2008/06/15 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
关于Python-faker的函数效果一览
2019/11/28 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
异步传递消息系统的作用
2016/05/01 面试题
客户答谢会活动方案
2014/08/31 职场文书
学生实习证明范文
2014/09/28 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
小学见习报告
2014/10/31 职场文书
表扬信范文
2015/05/04 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
《失物招领》教学反思
2016/02/20 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python