1.阈值处理的函数thershold
d1,d2=cv.threshold(src, thresh, maxval, type, dst)
src:被处理的图像,可以是多通道图像
thresh:阈值,阈值在125~150之间效果更好
maxval:阈值处理采用的最大值
type:阈值处理的类型
d1:处理时采用的阈值
d2:阈值处理过的图像
阈值是图片亮度,灰度图像阈值0为黑色,255为白色
常用类型:
cv.THRESH_BINARY #二值化阈值
cv.THRESH_BINARY_INV#反二值化阈值
cv.THRESH_TOZERO #低于阈值0处理
cv.THRESH_BINARY_INV#超出阈值0处理
cv.THRESH_TRUNC #截断阈值处理
具体代码:
import cv2 as cv
img=cv.imread(r'img\jmh\dog.jpeg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转化为灰度图
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY)#二值化阈值
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)#反二值化阈值
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_TOZERO)#低于阈值0处理
#d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)#超出阈值0处理
#d1,d2=cv.threshold(img1,139,255,cv.THRESH_TRUNC)#截断阈值处理
cv.imshow('d',d2)
cv.waitKey()
二值化
反二值化
低于阈值0处理
超出阈值0处理
截断处理
具体解释:
二值化处理:处理图像保留两种像素,或者是所有的像素都只能从两种值中取值
if 像素值 <=阈值:
像素值=0
if 像素值>阈值:
像素值=最大值
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY)
二值化处理将亮度小于等于130的像素点修改为255
if 像素值<=阈值:
像素值=最大值
if 像素值>阈值:
像素值=0
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY_INV)
反二值化处理将亮度大于等于130的像素点修改为255
反阈值是将亮度
2.自适应处理
cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
src:图像
maxValue:阈值处理采用的最大值,
adaptiveMethod:自适应阈值的计算方法
cv.ADAPTIVE_THRESH_MEAN_C:对一个正方形区域内的所有平均加权 cv.ADAPTIVE_THRESH_GAUSSIAN_C:根据高斯函数按照像素与中心点的距离对一个正方形区域的所有像素,进行加权计算
thresholdType:阈值处理类型,其处理的类型必须是二值化和反二值化
blockSize:一个正方形区域的大小
C:常熟,阈值等于,均值或者加权值减去这个常数
具体代码:
import cv2
import cv2 as cv
img=cv.imread(r'img\jmh\cat.jpg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
img2=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)
img3=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.ADAPTIVE_THRESH_GAUSSIAN_C,5,3)
cv.imshow('img2',img2)
cv.imshow('img3',img3)
cv.waitKey()
cv.ADAPTIVE_THRESH_MEAN_C处理
cv.ADAPTIVE_THRESH_GAUSSIAN_C处理
3.Otsu方法:
寻找合适的阈值
函数:
d1,d2=cv2.threshold(src,thresh,maxval,type)
src:被处理的图片
thresh:阈值
maxval:阈值处理采用的最大值
type:阈值处理类型,在阈值处理类型传入时多传入一个参数,例如:cv.THRESH_BINARY+cv2.THRESH_OTSU
d1:返回最合适的阈值
d2:经过阈值处理的图像
具体代码:
import cv2 as cv
img=cv.imread(r'img\jmh\dog.jpeg')
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转化为灰度图
d1,d2=cv.threshold(img1,130,255,cv.THRESH_BINARY+cv.THRESH_OTSU)#二值化阈值
print("合适的阈值为",d1)
cv.imshow('d',d2)
cv.waitKey()
>>合适的阈值为 131.0
在阈值的作用下,一幅图像被转化为只有纯黑色和纯白的二值图像,然而灰度图像在经过5种阈值处理后,都无法得到图像主体的线条,为此有了自适应处理,其关键在于对图像中的不同区域使用不同阈值。