所需模块与自定义函数
import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name, mat):
cv2.imshow(name, mat)
cv2.waitKey(0)
cv2.destroyAllWindows()
一、均值滤波
均值滤波的特点就是对某个像素点附近的所有点数相加,并求平均数,得到该像素点的值,有利于图像整体的平滑处理。
1.blur
### 函数原型
void cv::blur ( InputArray src,
OutputArray dst,
Size ksize,
Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT
)
### 在python中使用
dst = cv.blur(src, ksize, dst, anchor, borderType)
src | 原图像。深度须是CV_8U, CV_16U, CV_16S, CV_32F , CV_64F其中的一种 |
dst | 处理后的图像,大小类型须和原图像相同 |
ksize | 处理的像素点范围 |
2.方框滤波——boxFilter
与blur滤波相似,但选择更为灵活
### 函数原型
void cv::boxFilter ( InputArray src,
OutputArray dst,
int ddepth,
Size ksize,
Point anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT
)
### 在python中使用
dst = cv.boxFilter(src, ddepth, ksize, dst, anchor, normalize, borderType)
src | 原图像 |
dst | 处理后的图像,大小类型须和原图像相同 |
ddepth | 输出图像的深度。置为-1自动调用src.depth()获得 |
ksize | 参考的像素点范围(a, b) |
normalize | 取值为True或False,表示是否归一化 |
注意:ksize参数是一个元组,(a, b)表示参考范围为a × b的范围。
归一化表示将像素点的值相加后是否除以像素点的个数。如果选择不归一化,则处理过程中容易越界。如果选择归一化,则处理结果与blur处理结果相同。
二、高斯滤波
与均值滤波相比,不同的是高斯滤波对待处理像素点周围的点还赋上了不同的权重,离待处理点越近的权重值越高,反之越低。权值会根据高斯函数的形状来选择。高斯平滑滤波对于那种噪声服从正态分布的抑制特别有效。
### 函数原型
void cv::GaussianBlur ( InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT
)
### 在python中使用
dst = cv2.GaussianBlur(src, ksize, sigmaX, dst, sigmaY, borderType)
src | 原图像。深度须是CV_8U, CV_16U, CV_16S, CV_32F , CV_64F其中的一种 |
dst | 处理后的图像,大小类型须和原图像相同 |
ksize | 参考的像素点范围。(a, b)。a和b可以不同但是必须是正奇数 ;或者设置成(0,0)使用后面的sigma参数 |
sigmaX | X方向上的高斯核标准偏差。 |
sigmaY | Y方向上的高斯核标准差。 |
注意:如果 sigmaY 为零,则将其设置为等于 sigmaX;如果sigmaX和sigmaY都是0,这两个值将由ksize.width和ksize.height计算而来。
三、中值滤波——medianBlur
### 函数原型
void cv::medianBlur(InputArray src,
OutputArray dst,
int ksize
)
### 在Python使用
dst = cv.medianBlur(src, ksize, dst)
src | 原图像,可以是1通道,3通道,4通道的图像; 当ksize是3或者5时,图像的深度必须是CV_8U, CV_16U, or CV_32F, 对于更大的ksize,图像深度只能是CV_8U. |
dst | 处理后的图像,大小类型须和原图像相同 |
ksize | 图像处理时的参考线性尺寸,必须是大于1的奇数。for example: 3, 5, 7 ... |