概要: 众嗦粥汁所周知,在如今计算机视觉(Computer Version short for CV)是人工智能与机器人技术发展的一个重大研究方向,而opencv作为一个专门为机器视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。

本期所要介绍的函数是opencv库中的函数——threshold

thresold函数的主要作用是图像阈值分割,利用图像中像素像素值大小的差别,选择一个适当的阈值,将图像分割为目标区域(target_area)与背景区域(background_area),生成一个我们需要的二值图像,主要特点是黑白分明。(什么是黑白分明~~是是非非谁人会懂~~)。二值图将为我们裁剪目标区域,进行目标识别与分析剔除不必要的背景区域,消除不必要区域对于图像处理的干扰。

本期依旧是请出“饥荒”(就逮着一只羊薅羊毛)中的角色“沃尔夫冈”(下图可见)作为我们本期文章的演示素材嘉宾。他在强壮时期强壮如牛,瘦弱时期瘦弱如鼠(肾虚)的特点完美符合二值图黑白分明的特点。话不多说,我是Kamen Black君,马上开始今天的学习,我已经等不及力。

正文部分:

print("祝大家每天快乐,love and peace!")

①使用准备:

与前几期一样,依旧是调用我们的工具人老伙伴----opencv,作为我们使用threshold的大前提。

import cv2

②适用情况(新内容):

图像阈值分割一般适用于背景区域与目标区域像素值分别较大的情况。只有当两者之间的区别较大时,才能够较为容易地找到一个适当的阈值作为区别两者的分界线,不然如果两者之间的灰度值差异不明显,就可能会导致区域的错误划分,或者是阈值的难以选择,抑或是得不到封闭的单连通区域,这会使得后续的目标裁剪变得复杂与困难。(只怕是藕断丝连~~一切都是难舍难分~~

③语法说明:

使用语法:thresh,result=cv2.threshold (src, thresh, maxval, type)

参数说明:thresh为设定的阈值,取值范围即为灰度值的范围0~255,数据类型为浮点型(输入可以为整型);

result为进行阈值分割后的结果图像,数据类型为整数矩阵;

src为被进行分割的源图像,一般为单通道的灰度图,但三通道的RGB图像也可以进行处理(但可能只根据第一个通道的大小进行处理(所谓枪打出头鸟))

maxval为最大值,为分割后的图像所取到的灰度最大值

type为阈值分割的类型,常用的有THRESH_BINARY、THRESH_BINARY_INV、THRESH_TOZERO、THRESH_TOZERO_INV。具体的说明可见下表所示:

threshold types说明
THRESH_BINARY 灰度值超过阈值的像素设置为最大灰度值,不超过的设置为0
THRESH_BINARY_INV 灰度值不超过阈值的像素设置为最大灰度值,超过的设置为0
THRESH_TOZERO 灰度值低于阀值的像素设为0灰度值
THRESH_TOZERO_INV 灰度值高于阀值的像素设为0灰度值
THRESH_TRUNC 灰度值超过阈值的像素设为阈值的灰度值
THRESH_MASK 掩码
THRESH_OTSU 标记,使用大津算法来选择最佳阈值,只支持8位单通道图像
THRESH_TRIANGLE 标记,使用TRIANGLE算法来算则最佳阈值,只支持8位单通道图像

另附上cv2.threshold函数的原生文档说明(有道翻译是个好东西(有道还不打钱))

def threshold(src, thresh, maxval, type, dst=None): # real signature unknown; restored from __doc__"""threshold(src, thresh, maxval, type[, dst]) -> retval, dst.   @brief Applies a fixed-level threshold to each array element..   .   The function applies fixed-level thresholding to a multiple-channel array. The function is typically.   used to get a bi-level (binary) image out of a grayscale image ( #compare could be also used for.   this purpose) or for removing a noise, that is, filtering out pixels with too small or too large.   values. There are several types of thresholding supported by the function. They are determined by.   type parameter..   .   Also, the special values #THRESH_OTSU or #THRESH_TRIANGLE may be combined with one of the.   above values. In these cases, the function determines the optimal threshold value using the Otsu's.   or Triangle algorithm and uses it instead of the specified thresh..   .   @note Currently, the Otsu's and Triangle methods are implemented only for 8-bit single-channel images..   @param src input array (multiple-channel, 8-bit or 32-bit floating point)..   @param dst output array of the same size  and type and the same number of channels as src.    .   @param thresh threshold value. .   @param maxval maximum value to use with the #THRESH_BINARY and #THRESH_BINARY_INV thresholding.   types..   @param type thresholding type (see #ThresholdTypes)..   @return the computed threshold value if Otsu's or Triangle methods used..   .   @sa  adaptiveThreshold, findContours, compare, min, max"""pass

④实例操作:

下面通过几个简单的操作,给大家呈现一下参数不同的情况下对图片处理情况的不同(沃尔夫冈大放送(bushi)):

1、掉色的沃尔夫冈:

>>> src=cv2.imread("F://src.png")
>>> thresh,result0=cv2.threshold(src,80,255,cv2.THRESH_BINARY)

2、白纸黑字的沃尔夫冈:

>>> gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
>>> thresh,result1=cv2.threshold(gray,80,255,cv2.THRESH_BINARY)

3、黑纸白字的沃尔夫冈:

>>> gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
>>> thresh,result2=cv2.threshold(gray,80,255,cv2.THRESH_BINARY_INV)

4、网抑云的沃尔夫冈:

>>> gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
>>> thresh,result3=cv2.threshold(gray,80,255,cv2.THRESH_TOZERO)

5、底片的沃尔夫冈:

>>> gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
>>> thresh,result4=cv2.threshold(gray,80,255,cv2.THRESH_TOZERO_INV)

6、素描的沃尔夫冈:

>>> gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
>>> thresh,result5=cv2.threshold(gray,80,255,cv2.THRESH_TRUNC)

PS:一个小知识:threshold在英语中的原意是“门槛”的意思,在这里就延伸了它的意思,引申出了“阈值、限值”的内涵。看我的博客还能学英语,这样的宝藏博主还不赶快关注起来:>

沃尔夫冈:多少有点臭不要脸了 

结语:本期中我们学习了threshold函数,了解到opencv中用来进行图像阈值切割的方法,学会了将目标区域与背景区域分离开来的方式,也学会使用不同的threshold类型来对图像作不同类型的阈值切割处理,这些对于我们进一步对于目标区域进行识别都有很大的帮助。

好了以上就是所有的内容,希望大家多多关注,点赞,收藏,这对我有很大的帮助。谢谢大家了!

好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~

python-opencv第四期:threshold函数详解相关推荐

  1. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  2. Python+NetworkX画图的nx.draw_networkx(函数详解)

    Python+NetworkX画图的nx.draw_networkx函数详解 Python+NetworkX画图的nx.draw_networkx(函数详解) Python+NetworkX画图的nx ...

  3. python中argparse模块关于 parse_args() 函数详解(全)

    目录 前言 1. 函数讲解 2. 基本用法 3. 实战讲解 前言 原理:命令行解析使用argparse包 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等 了解这个函数需要了解其背后的原 ...

  4. 【蓝牙sbc协议】sbc源码阅读笔记(四)——sbc_encode函数详解

    sbc_encode函数详解 函数定义: // sbc.c SBC_EXPORT ssize_t sbc_encode(sbc_t *sbc, const void *input, size_t in ...

  5. 计算机视觉开源库OpenCV之threshold()函数详解

    cv2.threshold()函数作用:去掉噪,例如过滤很小或很大像素值的图像点. cv2.threshold()函数python版原型: retval, dst = cv.threshold(src ...

  6. opencv 二值化 python_opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用...

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  7. opencv 二值化 matlab,opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH...

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  8. ​【Python入门】Python数学math模块55个函数详解

    Python math 模块提供了许多对浮点数的数学运算函数.主要包括以下几个部分 数论与表示函数 幂函数与对数函数 三角函数 角度转换 双曲函数 特殊函数 常量 import math print( ...

  9. opencv中imgproc库中函数详解(1)

    BaseColumnFilter 单列核的基础滤波器. [cpp] view plaincopy class BaseColumnFilter { public: virtual ~BaseColum ...

  10. python中的range()函数详解

    首先说明一下range()函数: 在python中range()函数是一个内建函数:这个内建函数用起来还是很方便的,只不过有些细节的地方我在这里写一写!供大家交流! (1)记录如下: 既然上面的明白了 ...

最新文章

  1. linux目录表及功能n鸟哥,鸟哥linux私房菜_笔记_Linux的文件权限与目录配置
  2. 可以解压日文的软件_日文换成中文字体就不好看?我偏不信这个邪!
  3. Android 5.0 屏幕录制/截屏
  4. javaweb面试题目整理
  5. 如何快速分解CAD图纸中多个合并的CAD图形?
  6. 【Tableau 设计提示11 】- 仪表板布局提示
  7. 干货,看微信小程序后台用户数据如何演变和递增
  8. 成都盛铭轩:商品标题怎么写
  9. 在线解答计算机问题,计算机问题及解答.doc
  10. git中push和pull的区别是什么
  11. 数据结构—栈和队列经典面试题
  12. 面向接口编程思想(转)
  13. 【Nginx】nginx代理视频流hls地址
  14. python如何实现找图_Python深度学习,手把手教你实现「以图搜图」
  15. 尝试N种低格工具失败,采用MP Tool量产工具完成U盘修复
  16. 哈工大计算机网络第二章——应用层复习
  17. iOS 高德地图定位并进行周边搜索
  18. md5模块和hashlib模块
  19. Dart-Aqueduct框架开发(七)
  20. Loadrunner 问题总结

热门文章

  1. 2022年危险化学品经营单位安全管理人员考试题库及模拟考试
  2. Ubuntu18.04+思岚激光雷达A2M7+ROS测试
  3. 汇编语言aaa指令解析,aas指令解析
  4. 陈强老师公开课笔记1——如何区别中介效应、调节效应与交互效应?
  5. 子元素和后代元素的区别
  6. i春秋 第二届春秋欢乐赛 Web-Hello World
  7. 特斯拉Model 3进化不止 传统车企到底应该学什么?...
  8. pm2和pm2-logrotate 日志管理 初探
  9. 2022年东南亚电商市场分析,跨境电商增长新途径
  10. 只工作不玩耍,聪明的孩子也变傻