opencv学习记录之阈值处理

Posted miaorn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习记录之阈值处理相关的知识,希望对你有一定的参考价值。

阈值处理是指将图像内高于一定值或者低于一定值的像素点进行处理

函数形式为:

retval ,dst = cv2.thresshold( src , thresh , maxval , type )

retval代表返回的阈值

dst代表阈值分割结果图像,与原始图像有相同的大小和类型

src代表要进行分割的图像,可以是多通道的

thresh代表要设定的阈值

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

type代表阈值分割的类型

具体类型如下

技术图片

 

 

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

处理之后图像为只有两个值的二值图像

对于8位灰度图像,将超过阈值thresh的值处理为最大值255,低于阈值的处理位0

1 import cv2
2 import numpy as np 
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
5 print("img=
",img)
6 print("t=",t)
7 print("rst=
",rst)
img=
 [[ 98 151  50 196 238]
 [ 45  64 225 227 204]
 [ 45  19  46 233  82]
 [122 103  64 182 218]]
t= 127.0
rst=
 [[  0 255   0 255 255]
 [  0   0 255 255 255]
 [  0   0   0 255   0]
 [  0   0   0 255 255]]

 

 

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

处理后的图像也是只有两个值的二值图像,

将灰度值大于阈值thresh的像素点,将其值处理为0,低于的处理为255

1 import cv2
2 import numpy as np 
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
5 print("img=
",img)
6 print("t=",t)
7 print("rst=
",rst)
img=
 [[161 182 120 192 159]
 [ 64 197 108 242 182]
 [237 203   8 206  67]
 [ 31   7 190 226  22]]
t= 127.0
rst=
 [[  0   0 255   0   0]
 [255   0 255   0   0]
 [  0   0 255   0 255]
 [255 255   0   0 255]]

 

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

对于像素值大于阈值thresh的值将其处理为阈值的值,小于阈值的值保持不变

import cv2
import numpy as np 
img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
t,rst=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
print("img=
",img)
print("t=",t)
print("rst=
",rst)
img=
 [[ 31 121 210 126 117]
 [ 17 144  78  31 193]
 [ 91 143  27  58 103]
 [203 216 151 176  30]]
t= 127.0
rst=
 [[ 31 121 127 126 117]
 [ 17 127  78  31 127]
 [ 91 127  27  58 103]
 [127 127 127 127  30]]

 

超阈值零处理(cv2.THRESH_TOZERO_INV)

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

1 import cv2
2 import numpy as np 
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
5 print("img=
",img)
6 print("t=",t)
7 print("rst=
",rst)
img=
 [[209 180 150 127  21]
 [ 11 227   7 223 211]
 [218  84  90  32  61]
 [101 129 240  36 176]]
t= 127.0
rst=
 [[  0   0   0 127  21]
 [ 11   0   7   0   0]
 [  0  84  90  32  61]
 [101   0   0  36   0]]

 

低阈值值零处理(cv2.THRESH_TOZERO)

低阈值处理会将图像中小于或等于阈值的像素点的值处理为0,大于阈值的像素点的值保持不变

1 import cv2
2 import numpy as np 
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
5 print("img=
",img)
6 print("t=",t)
7 print("rst=
",rst)
img=
 [[249  40  83  55 210]
 [195 144 246 163 230]
 [ 41 124  16 209   5]
 [ 48 177 190 118  75]]
t= 127.0
rst=
 [[249   0   0   0 210]
 [195 144 246 163 230]
 [  0   0   0 209   0]
 [  0 177 190   0   0]]

以上是关于opencv学习记录之阈值处理的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV图像处理应用(面向Python)之阈值与平滑处理

youcans 的 OpenCV 例程200篇160. 图像处理之OTSU 方法

youcans 的 OpenCV 例程200篇160. 图像处理之OTSU 方法

opencv学习图像阈值和平滑处理

#yyds干货盘点# Python Opencv实战之图像阈值和模糊处理,万字实战,收藏起来吧~

youcans 的 OpenCV 例程200篇158. 阈值处理之固定阈值法