图像线性变换
Mat src,dst;
src.convertTo(dst,,alpha,beta);
函数原型:
void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 )
rtype:变换类型,不知道有几个待选参数
变换公式:dst=src*alpha+beta
alpha改变对比度,beta改变亮度
图像滤波
平滑滤波处理,也叫模糊处理
opencv提供5个常用图像平滑处理操作方法
- 方框滤波——BoxBlur函数
- 均值滤波(邻域平均滤波)——Blur函数
- 高斯滤波——GaussianBlur函数
- 中值滤波——medianBlur函数
- 双边滤波——bilateralFilter函数
方框滤波
CV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor = Point(-,-),
bool normalize = true,
int borderType = BORDER_DEFAULT );
第一个参数:原图像
第二个参数:输出图像
第三个参数:输出图像深度,-代表原图深度
第四个参数:内核大小,用Size(w,h)表示,w为像素宽度,h为像高度
第五个参数:Point类型的anchor,表示锚点(即被平滑的那个点)。默认值是核的中心为锚点
第六个参数:默认值true,表示内核是否被其区域归一化了
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT
方框滤波器所用内核为:
K=a⎡⎣⎢111111111⎤⎦⎥
a={1ksize.width∗ksize.heightnormalize=true1normalize=false
均值滤波
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-,-),
int borderType = BORDER_DEFAULT );
第一个参数:输入图像
第二个参数:输出图像
第三个参数:内核大小
第四个参数:锚点,平滑点
第五个参数:边界类型,同上
均值滤波内核:
K=1ksize.width∗ksize.height⎡⎣⎢111111111⎤⎦⎥
缺陷:不能很好的保护图像细节,去除噪声的同时也破坏了图像的细节部分。
高斯滤波
CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = ,
int borderType = BORDER_DEFAULT );
第一个参数:输入图像
第二个参数:输出图像
第三个参数:内核大小
第四个参数:高斯核函数X方向的标准偏差
第五个参数:高斯核函数Y方向的标准偏差
第六个参数:边界类型,通常取默认值
从数学角度看,高斯模糊过程就是图像与正态分布做卷积。
中值滤波
中值滤波是非线性滤波器,其 基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节。
CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );
相对简单,不解释
双边滤波
它是结合图像的空间林精度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的,具有简单,非迭代,局部的特点。
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType = BORDER_DEFAULT );
第一个参数:输入图像
第二个参数:输出图像
第三个参数:表示在过滤过程中每个像素领域的直径。如果这个参数设为非正数,那么他会用第五个参数sigmaSpace来计算出它
第四个参数:颜色空间滤波器的sigma值。这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大半径颜色相等区域
第五个参数:坐标空间中滤波器的sigma值,坐标空间的标注方差,它的数值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
第六个参数:常用默认值
锐化空间滤波
锐化的作用是加强图像的边缘和轮廓,通常也成为高通滤波器
模板一般为中心为正,外围为负值。
使用filter2D函数来对图像滤波,使用不同的kernel,会得到不同的效果。
CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor = Point(-,-),
double delta = , int borderType = BORDER_DEFAULT );
第一个参数:输入图像
第二个参数:输出图像
第三个参数:输出图像深度
第四个参数:使用的内核,类型为Mat
第五个参数:锚点,默认是核的中心点
第六个参数:边界类型,默认值。
使用注意事项:
()卷积核不能大于*
()卷积核的类型需是有符号的,卷积核的类型通常设为CV_32F,输出图像深度也设为CV_32F,之后再把图像转回CV_8UC。
卷积核构造
Mat kernel(,,CV_32F,Scalar(-));
kernel.at<float>(,)=;
这样就构造了一个拉普拉斯算子
opencv中还有很多滤波函数,没有一一去尝试,以后有时间再一个个看一下。
内容参考opencv源码和官方文档
http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html
《opencv3编程入门》—浅墨