美文网首页视觉处理
常规5大阈值处理---OpenCV-Python开发指南(15)

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

作者: 极客学编程 | 来源:发表于2021-04-18 19:02 被阅读0次

什么是阈值处理

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

threshold

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

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

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

thresh:需要设定的阈值

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

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

类型 含义
cv2.THRESH_BINARY 1.png

|

| cv2.THRESH_BINARY_INV | 2.png

|

| cv2.THRESH_TRUNC | 3.png

|

|cv2.THRESH_TOZERO_INV | 4.png

|

| cv2.THRESH_TOZERO | 5.png

|
|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()

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


二值化阈值处理

可以看到通过二值化阈值处理,我们的图像有点像素描画的效果。

反二值化阈值处理(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()
反二值化阈值处理

截断阈值化处理(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()

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

截断阈值化处理

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

超阈值零处理(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()

运行之后,效果如下:


超阈值零处理

低阈值零处理(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()

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


低阈值零处理

相关文章

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

    什么是阈值处理 阈值处理是剔除原图像中像素高于或者低于一定值的像素点。例如将一个灰度图像中大于200的像素点统一设...

  • 自适应阈值处理与Otsu处理---OpenCV-Python开发

    为什么需要自适应阈值处理 对于色彩均衡的图像来说,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时候图像的色...

  • 图像平滑处理---OpenCV-Python开发指南(17)

    什么是图像平滑处理 在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程我们称之为图像的平滑处理,所得到...

  • 阈值处理

    阈值处理 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰...

  • 阈值处理

    OpenCV提供了两个函数cv2.threshold() 和 cv2.adaptiveThreshold(),用于...

  • 阈值处理

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第6...

  • 阈值处理

    阈值处理是指剔除图像内像素高于一定值或者低于一定值的像素点 二值化阈值处理(cv2.THRESH_BINARY) ...

  • 1.10 openCV-python 图像阈值

    图像阈值 简单阈值,自适应阈值,Otsu’s 二值化等

  • OpenCV--图像处理 图像阈值

    3、图像处理 图像阈值 thresh 通过对像素点与阈值的比较,当大于阈值或小于阈值时分别进行取值 ret, ds...

  • 直方图均衡化处理:去雾---OpenCV-Python开发指南(

    直方图均衡化 直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这...

网友评论

    本文标题:常规5大阈值处理---OpenCV-Python开发指南(15)

    本文链接:https://www.haomeiwen.com/subject/ohkelltx.html