python-opencv第四期:threshold函数详解

本文详细介绍了OpenCV库中的threshold函数,该函数用于图像阈值分割,能够将图像分为目标区域与背景区域,生成二值图像。文章通过实例展示了不同阈值类型的应用效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

a1b740978dc44cf596d1a4ffa81c938a.png​ 

 正文部分:

f05860e073cb45d6af5d75e158535612.jpeg

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)

a98f20767a0d4e8db6c49e98879ec7e1.jpeg

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

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

ede7666c50f7479fa55277655146b11d.jpeg

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

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

b3f790806758487290de6b634d32de38.jpeg

4、网抑云的沃尔夫冈:

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

24c276b6ed7f47ac9b9d7926a7713a6a.jpeg

5、底片的沃尔夫冈:

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

f7ebd6706c6e44dd93bf2f6464087441.jpeg

6、素描的沃尔夫冈:

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

8ac41873fed74043b734219dbff8c851.jpeg

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

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

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

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

e63444f11e4844da927650cfd1d40197.gif

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

 7f79687925634801ac75cc10f553ff08.jpeg

Python中,threshold算法是用于图像阈值化的一种方法。阈值化是将图像转换为二值图像的过程,其中像素值高于或低于特定阈值的像素被分配为不同的像素值。这可以用于图像分割、边缘检测和特征提取等应用。 在引用\[1\]中的代码示例中,使用了cv2库中的threshold函数来进行图像阈值化。该函数的参数包括输入图像、阈值、最大像素值和阈值类型。根据阈值类型的不同,可以选择不同的阈值化方法,如全局阈值化、自适应均值阈值化和自适应高斯阈值化。 在引用\[2\]中的代码示例中,使用了cv2库中的threshold函数来进行图像阈值化。通过将彩色图像转换为灰度图像,然后使用阈值化算法,可以将图像转换为二值图像。其中,阈值类型为cv2.THRESH_BINARY | cv2.THRESH_OTSU,表示使用Otsu算法自动选择阈值。 在引用\[3\]中的代码示例中,使用了cv2库中的threshold函数来进行图像阈值化。其中,使用了cv2.THRESH_TRUNC阈值类型,该类型将大于阈值的像素值截断为阈值。 总之,Python中的threshold算法可以根据不同的阈值类型将图像转换为二值图像,用于图像处理和分析的各种应用。 #### 引用[.reference_title] - *1* *2* [OpenCVpython)从入门到精通——threshold阈值算法](https://blog.csdn.net/weixin_42917352/article/details/118684586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python-opencv第四期threshold函数详解](https://blog.csdn.net/m0_55320151/article/details/127192801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kamen Black君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值