几种模糊类型
均值模糊(均值滤波)
但不难看出,均值滤波的边缘像素未被调整。
均值模糊相关API
API相关参数:
原图像,输出图像,每次调整的矩阵大小,中心像素位置(Point(-1,-1)表示默认中心位置,一般不改变Point)。
代码示例
#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main()
{
Mat img,src,dst;
img=imread ("test1.jpg");//把图片放在程序对应目录下可以直接调用,但注意文件名有无空格
if (!img.data)
{
cout << "图片加载失败" << endl;
}
blur(img, dst, Size(3, 3), Point(-1, -1));
//原图像,输出图像,每次调整的矩阵大小,中心像素位置(Point(-1,-1)表示默认中心位置,一般不改变Point)。
imshow("调整前", img);
imshow("调整后",dst);
waitKey(0);
return 0;
高斯模糊(高斯滤波)
相当于通过对每个矩阵像素的
正态分布进行处理
高斯模糊相关API
原图像,输出图纸,每次调整的矩阵大小,singmax和singmay是用来调节正态分布的数值。注意Size里面要为正奇数。!!!!!!
代码示例
#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main()
{
Mat img,src,dst;
img=imread ("test1.jpg");
if (!img.data)
{
cout << "图片加载失败" << endl;
}
GaussianBlur(img, dst, Size(5, 5), 11, 11);
imshow("调整前", img);
imshow("调整后",dst);
waitKey(0);
return 0;
}
中值模糊(中值滤波)
说白了就是取矩阵像素中间值作为中心点像素值
中值模糊相关API
原图像,输出图像,每次调整的矩阵大小
代码示例
#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main()
{
Mat img,src,dst;
img=imread ("test1.jpg");//把图片放在程序对应目录下可以直接调用,但注意文件名有无空格
if (!img.data)
{
cout << "图片加载失败" << endl;
}
medianBlur(img, dst, 3);
imshow("调整前", img);
imshow("调整后",dst);
waitKey(0);
return 0;
}
双边模糊(双边滤波)
双边模糊相关API
原图像,输出图像,计算半径,规定像素差值,d大于0无效,否则根据它来选择计算范围
代码示例
#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main()
{
Mat img,src,dst;
img=imread ("test1.jpg");//把图片放在程序对应目录下可以直接调用,但注意文件名有无空格
if (!img.data)
{
cout << "图片加载失败" << endl;
}
bilateralFilter(img, dst, 10, 100, 5);
imshow("调整前", img);
imshow("调整后",dst);
waitKey(0);
return 0;
}
通过模糊实现简单的美颜效果
双边模糊后再反差操作一下就可以实现简单的美颜效果
代码:
#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main()
{
Mat img,src,dst;
img=imread ("test1.jpg");//把图片放在程序对应目录下可以直接调用,但注意文件名有无空格
if (!img.data)
{
cout << "图片加载失败" << endl;
}
bilateralFilter(img, dst, 10, 100, 5);
//反差操作
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(dst,src,-1,kernel,Point(-1,-1),0);
imshow("调整前", img);
imshow("调整后",dst);
imshow("最终效果", src);
waitKey(0);
return 0;
}
调整前效果:
调整后效果:
当然这个图片是本来效果就已经很好所以看不出来特别明显,用自己照片来还是比较明显的。