常规5大阈值处理---OpenCV-Python开发指南(15)

举报
择城终老 发表于 2021/07/26 23:34:33 2021/07/26
【摘要】 目录 什么是阈值处理threshold二值化阈值处理(cv2.THRESH_BINARY)反二值化阈值处理(cv2.THRESH_BINARY_INV)截断阈值化处理(cv2.THRESH_TRUNC)超阈值零处理(cv2.THRESH_TOZERO_INV)低阈值零处理(cv2.THRESH_TOZERO) 什么是阈值处理 阈值处理是剔除原图像中像素高...

什么是阈值处理

阈值处理是剔除原图像中像素高于或者低于一定值的像素点。例如将一个灰度图像中大于200的像素点统一设置为255,这个就是阈值处理。或者说将所有低于200的像素点设置为0,也可以叫做阈值处理,两者结合处理后,图像就变为二值图像了。

threshold

在OpenCV中,我们使用cv2.threshold()函数进行阈值处理,它的定义如下所示:

def threshold(src, thresh, maxval, type, dst=None):

  
 
  • 1

src:需要进行阈值处理的原始图像

thresh:需要设定的阈值

maxval:当type为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值。

type:阈值的类型,如下表所示。

类型 含义
cv2.THRESH_BINARY 在这里插入图片描述
cv2.THRESH_BINARY_INV 在这里插入图片描述
cv2.THRESH_TRUNC 在这里插入图片描述
cv2.THRESH_TOZERO_INV 在这里插入图片描述
cv2.THRESH_TOZERO 在这里插入图片描述
cv2.THRESH_MASK 掩码
cv2.THRESH_OTSU 标记,使用Otsu算法时的可选阈值参数
cv2.THRESH_TRIANGLE 标记,使用Triangle算法时的可选阈值参数

二值化阈值处理(cv2.THRESH_BINARY)

顾名思义,二值化阈值处理,会将原始图像变更为仅有2个值的二值图像,也就是cv2.THRESH_BINARY。

下面,我们用代码来实现二值化阈值处理,具体代码如下所示:

import cv2

img = cv2.imread("4.jpg", 0)
t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("img", img)
cv2.imshow("result_img", result_img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行之后,效果如下所示:
二值化阈值处理
可以看到通过二值化阈值处理,我们的图像有点像素描画的效果。

反二值化阈值处理(cv2.THRESH_BINARY_INV)

反二值化阈值处理的结果也是仅有两个值的二值图像,与二值化的区别在于,就是将其大于赋值255,小于赋值0颠倒过来。

修改代码,我们看看运行的效果:

import cv2

img = cv2.imread("4.jpg", 0)
t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("img", img)
cv2.imshow("result_img", result_img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

反二值化阈值处理

截断阈值化处理(cv2.THRESH_TRUNC)

截断阈值化处理会将原图像中大于阈值的像素点的值设定为阈值,小于或等于像素点的值保持不变。也就是上面的将大于127像素的灰度图像全部更改为127,低于或等于127的保持不变。

import cv2

img = cv2.imread("4.jpg", 0)
t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
cv2.imshow("img", img)
cv2.imshow("result_img", result_img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行之后,得到的效果如下所示:

截断阈值化处理
可以理解为比二值化更纯粹的素描。

超阈值零处理(cv2.THRESH_TOZERO_INV)

超阈值零处理会将图像中大于阈值的像素点的值处理为0,小于或等于阈值的像素点保持不变。也就是将大于127的处理为0,小于等于127的保持不变。

import cv2

img = cv2.imread("4.jpg", 0)
t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("img", img)
cv2.imshow("result_img", result_img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行之后,效果如下:
超阈值零处理

低阈值零处理(cv2.THRESH_TOZERO)

低阈值零处理是将图像中小于或等于阈值的像素点处理为0,大于阈值的像素点保持不变。也就是小于等于127的全部赋值为0,大于127的保持不变。

import cv2

img = cv2.imread("4.jpg", 0)
t, result_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
cv2.imshow("img", img)
cv2.imshow("result_img", result_img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行之后,效果如下所示:
低阈值零处理

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/113807440

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。