opencv+python入门之五(阈值分割、滤波)

1.阈值分割

阈值分割的作用是把一幅灰度图二值化,通过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等。详细含义如下:

                           opencv+python入门之五(阈值分割、滤波)_第1张图片

以THRESH_BINARY为例,当像素值大于阈值时,直接取最大值,否则取0。要注意的是这里的最大值与设置的阈值无关,例如阈值为128,最大值可以设置为64,65或者255。

代码示例:

retval,dst = cv2.threshold(img,128,64,cv2.THRESH_BINARY) 

2.滤波专题

2.1均值滤波

原理:均值滤波是将选取的核与图像中的区域进行卷积,用卷积后的值代替图像区域中间的那个值。通俗一点,以3x3的核为例,均值滤波就是将其周围8个像素值一起求平均,用这个平均数代替中间的像素值。

dst = cv2.blur(img,(5,5))

2.2方框滤波

方框滤波和均值滤波很像。通过cv2.boxFilter(src,depth,kernel,normalize)来实现。其中depth代表图片深度,取-1时表示与原图深度相同;kernel表示的是核的大小,要求输入的是一个tuple;normalize是选择是否进行归一化操作,等于1时表示进行归一化,此时和均值滤波相同。若不进行归一化,就相当于将周围的值加起来,代替中间的元素,可见非常容易溢出。

dst = cv2.boxFilter(img,-1,(9,9),False)

2.3高斯滤波

高斯滤波指的是将周围的像素值按照不同的权重进行运算,(均值滤波相当于权重都为1),高斯滤波里中间像素值越近,其权重越大。调用的函数为cv2.GaussianBlur(src,ksize,sigmax)。ksize指的是核的大小,sigmax控制的是权重之间的方差,默认为0即可。例如下面便是sigmax取不同值的时候,权重的值

                                  \begin{bmatrix} 1 \1 \2\1\1\\ 1\2 \4\2\1\\ 2\4\8\4\2\\1\2\4\2\1\\1\1\2\1\1 \end{bmatrix}                                    \begin{bmatrix} 0 \0 \1\0\0\\ 0\1 \2\1\0\\ 1\2\3\4\1\\0\1\2\1\0\\0\0\1\0\0 \end{bmatrix} 

dst = cv2.GaussianBlur(img,(5,5),0)

sigmaX常设置为0,此时权重 sigma = 0.3*((ksize-1)*0.5-1)+0.8

2.4中值滤波

中值滤波的原理也很简单,就是用核中几个元素中的中间值来代替中间的像素值。

dst = cv2.medianBlur(img,(5,5))

 

你可能感兴趣的:(opencv+python)