opencv图像的模糊以及简单美颜效果的实现

几种模糊类型

均值模糊(均值滤波)

在这里插入图片描述
但不难看出,均值滤波的边缘像素未被调整。

均值模糊相关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;
}

调整前效果:
在这里插入图片描述
调整后效果:
在这里插入图片描述
当然这个图片是本来效果就已经很好所以看不出来特别明显,用自己照片来还是比较明显的。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页