阈值分割的作用是把一幅灰度图二值化,通过cv2.threshold(src,thresh,maxval,type)函数实现。thresh代表的是阈值,maxval指的是最大值,type是类型,主要有以下参数cv2.THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,
THRESH_TOZERO,THRESH_TOZERO_INV,THRESH_OTSU,THRESH_TRIANGLE,THRESH_MASK等。详细含义如下:
以THRESH_BINARY为例,当像素值大于阈值时,直接取最大值,否则取0。要注意的是这里的最大值与设置的阈值无关,例如阈值为128,最大值可以设置为64,65或者255。
代码示例:
retval,dst = cv2.threshold(img,128,64,cv2.THRESH_BINARY)
原理:均值滤波是将选取的核与图像中的区域进行卷积,用卷积后的值代替图像区域中间的那个值。通俗一点,以3x3的核为例,均值滤波就是将其周围8个像素值一起求平均,用这个平均数代替中间的像素值。
dst = cv2.blur(img,(5,5))
方框滤波和均值滤波很像。通过cv2.boxFilter(src,depth,kernel,normalize)来实现。其中depth代表图片深度,取-1时表示与原图深度相同;kernel表示的是核的大小,要求输入的是一个tuple;normalize是选择是否进行归一化操作,等于1时表示进行归一化,此时和均值滤波相同。若不进行归一化,就相当于将周围的值加起来,代替中间的元素,可见非常容易溢出。
dst = cv2.boxFilter(img,-1,(9,9),False)
高斯滤波指的是将周围的像素值按照不同的权重进行运算,(均值滤波相当于权重都为1),高斯滤波里中间像素值越近,其权重越大。调用的函数为cv2.GaussianBlur(src,ksize,sigmax)。ksize指的是核的大小,sigmax控制的是权重之间的方差,默认为0即可。例如下面便是sigmax取不同值的时候,权重的值
dst = cv2.GaussianBlur(img,(5,5),0)
sigmaX常设置为0,此时权重 sigma = 0.3*((ksize-1)*0.5-1)+0.8
中值滤波的原理也很简单,就是用核中几个元素中的中间值来代替中间的像素值。
dst = cv2.medianBlur(img,(5,5))