平滑/模糊(Smooth/Blur)是图像处理中最简单和经常使用的操做,能够给图像预处理时候下降噪声。
图像平滑处理每每使图像中的边界、轮廓变得模糊,缘由是由于图像受到了平均或积分运算,从频率域来考虑,图像模糊的实质是由于其高频份量被衰减git
f(i,j)表示一幅图像,第i行j列的像素,h(k,l)是卷积核/卷积算子,k l大小又叫窗口大小,在k l范围内f(i,j)与h(k,l)乘积,各值相加获得一新像素值,输出图像g(i,j)github
卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每一个像个像素点值之和取平均值赋给中心红色像素做为它卷积处理以后新的像素值。每次移动一个像素格。算法
滤波处理分为两大类:线性滤波和非线性滤波markdown
均值滤波的缺点就是不能很好地保护细节,在图像去燥的同时也破坏了图像的而细节部分,从而使图像变得模糊,不能很好的去除噪点。oop
/* 模糊处理 */
- (UIImage*)kj_opencvBlurX:(int)x y:(int)y{
cv::Mat src,dst;
UIImageToMat(self,src,true);
//均值滤波处理
blur(src, dst, cv::Size(x,y));
return kMatToUIImage(dst);
}
复制代码
高斯滤波,能够消除高斯噪声,普遍应用于图像处理的减噪过程。
高斯滤波处理,Size高斯内核大小必须为正奇数post
/* 高斯模糊,xy须要正数且为奇数 */
- (UIImage*)kj_opencvGaussianBlurX:(int)x y:(int)y{
cv::Mat src,dst;
UIImageToMat(self,src,true);
//高斯滤波处理,Size高斯内核大小必须为正奇数
GaussianBlur(src, dst, cv::Size(x,y), 0);
return kMatToUIImage(dst);
}
复制代码
基本思想就是用像素点的领域灰度的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的细节(不会出现边缘模糊的状况)
中值滤波跟均值滤波的思想看起来很类似,只是一个取平均值,一个取中位数而已spa
/* 中值模糊,能够去掉白色小颗粒,ksize必须为正数且奇数 */
- (UIImage*)kj_opencvMedianBlurksize:(int)ksize{
cv::Mat src,dst;
UIImageToMat(self,src,true);
//中值滤波主要处理椒盐小颗粒
medianBlur(src, dst, ksize);
return kMatToUIImage(dst);
}
复制代码
双边滤波的最大特色就是作边缘保存,能够作磨皮美白效果
双边滤波器能够很好的保存图像边缘细节而滤除掉低频份量的噪音,sigma<10
则对滤波器影响很小,若是sigma>150
则会对滤波器产生较大的影响,会使图片看起来像卡通3d
/* 高斯双边模糊,能够作磨皮美白效果 */
- (UIImage*)kj_opencvBilateralFilterBlurRadio:(int)radio sigma:(int)sigma{
cv::Mat src,dst;
UIImageToMat(self,src,true);
src = kFourChannelsBecomeThree(src);
//双边滤波器能够很好的保存图像边缘细节而滤除掉低频份量的噪音,
//sigma<10,则对滤波器影响很小,若是sigma>150则会对滤波器产生较大的影响,会使图片看起来像卡通
//图像必须是8位或浮点型单通道、三通道的图像
bilateralFilter(src, dst, radio, sigma, 5);
dst = kPromoteImageContrast(dst);
return kMatToUIImage(dst);
}
复制代码
综合对比,双边滤波是全部滤波中最清晰的code
filter2D
自定义卷积核,而后达到模糊效果orm
/* 自定义线性模糊 */
- (UIImage*)kj_opencvCustomBlurksize:(int)ksize{
cv::Mat src,dst;
UIImageToMat(self,src,true);
if (!(ksize%2)) ksize++;//保证为奇数
Mat kernel = Mat::ones(cv::Size(ksize,ksize), CV_32F/(float)(ksize*ksize));
filter2D(src, dst, -1, kernel);
return kMatToUIImage(dst);
}
复制代码
高斯双边模糊效果:
一、如何在 iOS 工程中使用 OpenCV
二、iOS使用OpenCV之调整图片亮度和对比度(一)
三、iOS使用OpenCV之图像融合(二)
四、iOS使用OpenCV之滤波处理(三)
接下来我会慢慢补充Opencv的相关文章,暂时已将常见的图片处理和图片算法封装出来,有须要的朋友能够去pod 'KJExtensionHandler/Opencv'