目标

学习简单阈值处理(cv2.threshold)和自适应阈值处理(cv2.adaptiveThreshold),大津二值化处理(otus's thresholding)

简单阈值处理(cv2.threshold(img,thresholding,replace_value,threshold_method))

在这里,问题是很简单的。如果像素的值大于设定的阈值(因为处理的是灰度图,因而图像是只有一个通道,每个像素的像素值代表该像素的颜色深度,取值从0-255),那么该像素就会被用设定的替代值给替代,如果小于阈值就会被指定成另外一个颜色(不知道为什么只有一个replace_value,但是用了几次都发现这个不能自己设定的值是黑色)。函数的第一个参数是源图像,必须是灰度图。第二个参数就是要设定的阈值A,用于区分像素值。第三个参数是要替换的像素值B。函数会遍历所有的像素点,对每一个像素点,如果它的像素值大于A(文档里面说有时候是小于,我不知道这个怎么设置小于的时候生效),那么就把它重新设置为B,小于A的话就设定为黑色(我也不知道为啥)。对于阈值处理方法,opencv提供了五种类型:cv2.THRESH_BINARY

cv2.THRESH_BINARY_INV

cv2.THRESH_TRUNC

cv2.THRESH_TOZERO

cv2.THRESH_TOZERO_INV

函数返回两个输出值,就是ret,img_threshold=cv2.threshold(img,thresholding,replace_value,threshold_method)

在没有启用大津二值化的时候,第一个返回值是没有用的,仅仅是你设置的thresholding的值(大津二值化在下文)。第二个返回值就是阈值处理后的图像(一个二维的numpy数组)。

下面是一个例子:import cv2

import numpy

import matplotlib.pyplot as plt

#导入库

img=cv2.imread('E:/p.jpg',0)

#读入图像,以灰度图存储ret,img_threshold_BINARY=cv2.threshold(img,177,255,cv2.THRESH_BINARY)

ret_1,img_threshold_THRESH_BINARY_INV=cv2.threshold(img,177,255,cv2.THRESH_BINARY_INV)

ret_2,img_threshold_THRESH_TRUNC=cv2.threshold(img,177,255,cv2.THRESH_TRUNC)

ret_3,img_threshold_THRESH_THRESH_TOZERO=cv2.threshold(img,177,255,cv2.THRESH_TOZERO)

ret_4,img_threshold_THRESH_THRESH_THRESH_TOZERO_INV=cv2.threshold(img,177,255,cv2.THRESH_TOZERO_INV)

# 分别进行五种阈值处理

title=[

'img',

'BINARY',

'BINARY_INV',

'TRUNC', 'TOZERO',

'TOZERO_INV'

]

pic=[

img,

img_threshold_THRESH_BINARY,

img_threshold_THRESH_BINARY_INV,

img_threshold_THRESH_TRUNC,

img_threshold_THRESH_TOZERO,

img_threshold_THRESH_TOZERO_INV

]

for i in range(6):

plt.subplot(2,3,i+1),plt.imshow(pic[i],'gray')

#由于matplot的图像存储通道顺序是RGB,opencv存储图像的方式是BGR,用‘gray’可以以灰度图显示

plt.title(title[i])

plt.show()

关于五种阈值处理的方法,我去搜了一下,自己总结了一下。

cv2.THRESH_BINARY:当像素值小于设定的阈值的时候,设定像素值为0,否则设定为预先设定的值

cv2.THRESH_BINARY_INV:当像素值小于设定的阈值的时候,设定像素值为预先设定的值,否则设定为0,和第一种方法的像素设定类似

cv2.THRESH_TRUNC:像素值如果大于阈值,那么就以阈值赋值给像素值。小于阈值的部分保留原始像素值不变

cv2.THRESH_TOZERO:像素值如果小于阈值,那么就以0赋值给像素值,否则保持原来的像素值

cv2.THRESH_TOZERO_INV:像素值如果大于阈值,那么就以以0赋值给像素值,否则保持原来的像素值不变。

自适应阈值处理

cv2.adaptiveThreshold(img,replace_value,type_of_mean,threshold_type,C,size_of_matrix)

在简单阈值处理中,我们使用一个全局量作为阈值检测的标准。但是当图像的不同部分有不同亮度(比如随手拍摄的照片),这个阈值标准就不是那么好用了。在这种情况下,我们使用一个自动的阈值。算法会根据图像的性质计算一个最合适的阈值,因而对于图像的不同部位会有不同的阈值,这样处理的图像会有更好的结果。根据阈值的计算方法的不同,有两个取均值的方法,对应于参数:type_of_mean:cv2.ADAPTIVE_THRESH_MEAN_C

: 阈值是周围像素值的均值

cv2.ADAPTIVE_THRESH_GAUSSIAN_C

: 根据像素周围的高斯矩阵得到的高斯均值

矩阵规模-决定了像素相邻矩阵的规模

(高斯矩阵就是根据像素周围的其他像素离它的远近进行加权平均,越近的像素点的权值越高)

img:源图像

the_other_value:要替换的阈值,也就是当像素值符合阈值标准的时候,像素值的取值

tyoe_of_mean:就是取阈值的方法

threshold_method:同上面的简单阈值处理的参数

C:在取阈值标准的时候在矩阵中要减去的像素值,也就是偏移量

size_of_matrix:矩阵的规模,会影响最终处理的结果的噪声值。

个人觉得自适应的阈值处理在拍摄照片的二值化处理中比简单阈值处理好用。

大津二值化

在简单阈值处理中,返回的第一个参数没有太大的意义。但是当我们加上大津二值化的额外参数之后,那个无用的返回值就有用了。

对于双峰图(就是像素条形图中出现两条峰值的图像),我们会自动使用双峰的均值作为阈值检测的标准。但是对于非双峰图,这个大津二值化不会生效。

要使用大津二值化,就是使用简单阈值处理,但是加上一个额外的参数:cv2.THRESH_OTSU,而原先的阈值标准只要简单地设置为0就行。

open cv python_open cv——图像阈值处理(python文档)相关推荐

  1. 这个VS Code扩展可以自动生成Python文档字符串

    机器之心报道 编辑:魔王 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code) ...

  2. 利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现 ...

  3. Python文档字符串生成器:基于CodeBERT,支持Google、Numpy等多种输出格式

    木易 发自 凹非寺  量子位 报道 | 公众号 QbitAI 又一款懒人神器问世了: Visual Studio Code的扩展,基于CodeBERT的Python文档字符串生成器. 看来现在,这群偷 ...

  4. python文档生成工具 sphinx 简介

    目录 简介 sphinx-build用法 Makefile选项 调用sphinx-apidoc 原文出处 简介 Sphinx是一个工具,她能够轻易地创建智慧和优雅的文档,她是出自Georg Brand ...

  5. 第十七部分-Python文档和测试

    第十七部分-Python文档和测试 转载于:https://www.cnblogs.com/daxionglaiba/p/11156995.html

  6. vscode python 自动补全_利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串...

    机器之心报道 编辑:魔王 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code) ...

  7. python 文档字符串_新款Python文档字符串生成器来了

    又一款懒人神器问世了: Visual Studio Code的扩展,基于CodeBERT的Python文档字符串生成器. 看来现在,这群偷「懒」的程序员们连文档字符串都不想自己写了. 基于CodeBE ...

  8. Sphinx——自动生成Python文档

    Sphinx是一个可自动生成python项目api的工具,使用起来也比较简单,只需要在项目上进行简单的配置,即可生成项目的api文档 简介 Sphinx是Python文档生成器,它基于reStruct ...

  9. python文档学习

    文章目录 python文档学习 python解释器 传入参数 交互模式的提示符 帮助信息 基础知识 python保留字 注释 多行语句 缩进 python数据类型与运算符 变量与基本类型 数字类型 集 ...

  10. Python——文档

    python包含了可以使文档的编写变得更简单的语法和工具. Python文档资源如下表: 形式 角色 #注释 文件中的文档 dir函数 对象中可用属性的列表 文档字符串:__doc__ 附加在对象上的 ...

最新文章

  1. VC嵌入断点中断INT3
  2. Mule 官方例子研究
  3. Flex4之与后台服务器通信方式:URLRequest+URLLoader【JAVA方式】
  4. struts-execl.xml
  5. svn 分支上新增文件合并发生冲突_SVN的使用、分支合并及解决冲突详解
  6. Spring Boot Transaction 源码解析(二)
  7. python用代码安装3.6_Python3.6安装及引入Requests库的实现方法
  8. 如何验证某个 string 是否为合法的 GUID ?
  9. Redis-3.2.4服务搭建
  10. KNN实现手写字体的识别
  11. python和股市一点小知识
  12. 清明节到五一的加班感触
  13. 所有文件夹变成快捷方式之“1KB文件夹快捷方式病毒”清除
  14. 工业和信息化部关于贯彻落实《推进互联网协议第六版(IPv6)规模部署行动计划》的通知
  15. 小菜的Scala学习笔记,主要部分更新完成
  16. java中多种写文件方式的效率对比实验
  17. 申论公文题-方案类-1
  18. 软件测试 | 测试开发 | 测试开发基础|一文搞定计算机网络(一)
  19. CCS如何调整字体大小
  20. linux下网口监控软件_管理员必备的20个Linux系统监控工具 | 旺旺知识库

热门文章

  1. 音乐社交娱乐教育APP Makeapp Wireframe Kit
  2. 了解png 格式,绝对是让你PPT设计感瞬间爆棚的大杀器
  3. 要想做好电商美工设计工作,这些必备技能你都需要掌握好!(附下载地址)
  4. 值从哪里来_内存频率是怎么算出来的?2133MHz这么奇怪的数字是怎么来的?
  5. ArcEngine二次开发_02(鼠标移过图层中显示特定的属性信息)
  6. Intel SDM Chapter 10: APIC
  7. TCMalloc:线程缓存Malloc以及tcmalloc与ptmalloc性能对比
  8. Linux文件系统概述:硬盘驱动>通用块设备层>文件系统>虚拟文件系统(VFS)
  9. windows10安装Visual Studio 2017
  10. panel垂直滚动条占用宽度_南开区垂直车库门车库门安装价格