09/10 - 模糊图像操作一、二(4种基础滤波)
图解4种基础滤波,理解
代码和理解 划分:
#include<opencv2/opencv.hpp>;
#include<iostream>;
using namespace std;
using namespace cv;
int main(int argc, char* argv) { // 09/10 - 模糊图像操作一、二(4种滤波)
Mat source1, change1,change2,change3,change4;
source1 = imread("F:\\OpenCV-Test\\TestPicture\\SourcePicture1\\1.PNG");
if (source1.empty()) { printf("can not load image ... \n"); return -1; }
imshow("原图",source1);
source1.copyTo(change1);
blur(source1, change1, Size(3,3), Point(-1, -1)); //均值滤波模糊。正奇数(属于线性滤波一类)3*3 九格相加除以9 赋给中间
imshow("change1:均值滤波模糊",change1);
/* 提升平滑度
source1:原始图像:channels不限,但是depth应当是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
change1:目标图像:size和type应与原始图像相同
Size(3,3):用于平滑操作的核的大小;均值滤波器模板大小
Point(-1, -1):锚点,锚点是滤波器的中心点,默认值为Point(-1,-1)表示锚点在核的中心0
*/
source1.copyTo(change2);
GaussianBlur(source1,change2,Size(3,3),1,9);// 高斯滤波模糊。正奇数(属于线性滤波一类)3*3 九格权重 相加除以9 赋给中间
imshow("change2:高斯滤波模糊", change2);
/* 提升平滑度但轮廓也抹平,例子提升ps美容效果
越靠近中心点 权重越大
source1:原始图像:channels不限,各通道单独处理;depth应当是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F)
change2:目标图像:size和type应与原始图像相同
Size(3,3):高斯核大小,滤波器模板大小;ksize.width和ksize.height可以不同,但是都必须为正的奇数(或者为0,此时它们的值会自动由sigma进行计算)
1,9:sigmaX和sigmaY分别为高斯滤波在X横线和Y竖向的滤波系数,权重调整计算
*/
source1.copyTo(change3);
medianBlur(source1,change1,3); //中值滤波模糊,正奇数
imshow("change3:中值滤波模糊", change3);
/* 椒盐噪点 消除,例子:去黑点,白点
source1和change3:分别是输入图像和输出图像。
3:3*3 九格,9数像素值 取中间值 赋给中间
*/
source1.copyTo(change4);
bilateralFilter(source1,change4,15,100,3);//高斯双边滤波模糊,
imshow("change4:高斯双边滤波模糊", change4);
/* 提升平滑但保留轮廓差值,例子提升ps美容效果
source1和change4:分别是输入图像和输出图像。
15:空域,模板大小,若<0 则按3计算
100:值域,像素最大最小间差值;若差值在100内计算,若差值大于100,边缘保留大小;
3:若d(15)<0,则按照3 模板大小计算,用于图像边缘处理
*/
waitKey(0);
return 0;
}
代码演示效果: