图像阈值化处理
cv2.threshold(src,thresh,maxval,type)
thresh:人为指定的阈值;
maxval:像素超过阈值,赋值,否则取0;
type:
1. cv2.THRESH_BINARY 超过阈值取255,低于阈值取0
2. cv2.THRESH_BINARY_INV 二值取反
3. cv2.THRESH_TRUNC 超过阈值取阈值,低于阈值取本身
4. cv2.THRESH_TOZERO 小于阈值取0,超过阈值取本身
5. cv2.THRESH_TOZERO_INV 超过阈值取0,低于阈值取本身
返回ret,dst;
ret为阈值返回值,为thresh;
dst为输出图像;
当阈值处理彩色图像时,出现黑白之外的颜色是因为BGR三通道的叠加。
均值滤波/填充
存在缺失值(噪声);
没有办法真正空白,白色也存在值;
均值滤波是针对每一个像素点,噪声得到较好的隐藏;
过程类似于滑动窗口法,暂时无法解决边界。
计算kxk个数,取平均,填充中间位置。
随着核越大,图像越模糊,噪声越少,无法处理的边界也越多;
cv2.blur(src,(kernel,kernel))
方框滤波
两种选择:
- 均值填充;
- 和填充。像素点溢出就直接取255。
cv.boxFilter(src,depth,(kernel,kernel),normalize)
depth:通常取-1,表示与源图像深度相同;
kernel:3x3,5x5
normalize:是否进行归一化;0不进行(像素点溢出,超过255取255),1进行(均值滤波)
高斯滤波
均值滤波的缺点:实际上是周围像素点的共同权重填充;
因此引入高斯滤波,离得越近,考虑更大的权重;因为就近的颜色应该应该一致。
cv2.GaussianBlur(src,(kernel,kernel),sigmaX,sigmaY)
sigmaX:X方向上的标准偏差
sigmaY:Y方向上的标准偏差
两个Sigma都是用来控制权重的。
Sigma = 0 时,系统会计算为
s
i
g
m
a
X
=
0.3
∗
(
(
k
s
i
z
e
−
1
)
∗
0.5
−
1
)
+
0.8
sigmaX=0.3*((ksize-1)*0.5-1)+0.8
sigmaX=0.3∗((ksize−1)∗0.5−1)+0.8
对矩阵中,x方向中的数据的方差和均值进行控制;
cv2.GaussianBlur(img,(5,5),0)
sigmaX = 0 ,默认 sigmaY = 0
kernelsize必须为奇数。
中值滤波
最好的形式,效果好得不行。
滤波都是为了降噪;
平均看不出来真实水准,因此采用中位数。
将kxk的矩阵中的元素,从大到小排序,取中间值。
cv2.medianBlur(src,kernel)
kernel:不用再传递元组