阈值 就是将图像分割的界限。一幅图像包括目标物体(前景)、背景还有噪声,阈值法可将图像和背景分割开。有简单阈值,自适应阈值,Otsu’s 二值化等,学习到的函数有:
- cv2.threshold 简单阈值
- cv2.medianBlur 中值滤波
- cv2.adaptiveThreshold 自适应阈值
- cv2.GaussianBlur 高斯滤波
导入需要的包
import cv2
import numpy as np
import matplotlib.pyplot as plt
简单阈值
这种方法整张图都采用一个数做阈值,是全局阈值。
cv2.threshold(src, thresh, maxval, type)
,src灰度图;thresh阈值;maxval最大值;type阈值类型。其中,阈值类型有以下几种:
cv2.THRESH_BINARY
:二值化操作,像素值大于阈值的点用maxval最大值表示,小于阈值用0表示。cv2.THRESH_BINARY_INV
:表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示。cv2.THRESH_TRUNC
:截断操作,大于阈值的使用阈值表示,小于阈值的不变。cv2.THRESH_TOZERO
:化零操作,大于阈值的不变,小于阈值的使用0表示cv2.THRESH_TOZERO_INV
:化零操作的翻转,大于阈值的使用0表示,小于阈值的不变
函数有两个返回值,第一个为 retVal,第二个就是阈值化之后的结果图像了。
img=cv2.imread('test.jpg',0)#以灰度模式读入图像
#img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将彩色图像转化为灰度图,两种方法都可以使用
ret,thresh1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#二值化操作,像素值大于127的点用225表示,小于阈值使用0表示
ret,thresh2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)#表示阈值的二值化翻转操作,
# 大于阈值的使用0表示,小于阈值的使用最大值表示
ret,thresh3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)#截断操作,大于阈值的使用阈值表示,小于阈值的不变。这里225起到了什么作用?
ret,thresh4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)#化零操作,大于阈值的不变,小于阈值的使用0表示
ret,thresh5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)#化零操作的翻转,大于阈值的使用0表示,小于阈值的不变
titles=['img',