用OpenCV实现图像滤镜特效

用OpenCV实现图像滤镜特效

目录

功能说明

使用vs2019创建MFC项目,利用OpenCv实现了9个图像处理功能。分别是模糊化,锐化,羽化,腐蚀,膨胀,边缘检测,灰度化,放大,缩小功能。利用MFC图形化界面,用户点击想要实现的功能按钮,即可实现对图片的处理。
在这里插入图片描述

原理简介

1.模糊化:
平滑,也称为模糊,是一种简单且经常使用的图像处理操作。要执行平滑操作,我们将对图像应用滤镜。最常见的滤波器类型是线性的,其中输出像素的值(即G(i ,j )被确定为输入像素值的加权和(即F(i + k ,j + l )):
在这里插入图片描述

h (k ,l )被称为内核,它只不过是过滤器的系数。它有助于将滤波器可视化为在图像上滑动的系数窗口。

Mat imageSource = imread("timg.jpg");
	Mat imageResult = imageSource.clone();
	RNG rng;
	int randomNum;
	int Number = 5;

	for (int i = 0; i < imageSource.rows - Number; i++)
		for (int j = 0; j < imageSource.cols - Number; j++)
		{
   
			randomNum = rng.uniform(0, Number);
			imageResult.at<Vec3b>(i, j)[0] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[0];
			imageResult.at<Vec3b>(i, j)[1] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[1];
			imageResult.at<Vec3b>(i, j)[2] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[2];
		}
	imshow("模糊化效果", imageResult);

运行截图:
在这里插入图片描述
2.锐化:
锐化滤波器则使用邻域的微分作为算子,增大邻域间像素的差值,使图像的突变部分变的更加明显。锐化的作用是加强图像的边沿和轮廓。
Mat Kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(srcCopy, dst, srcCopy.depth(), Kernel);
运行截图:
在这里插入图片描述
3.羽化:
羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。可根据你想留下图的大小来调节。
算法分析:
1、通过对rgb值增加额外的V值实现朦胧效果
2、通过控制V值的大小实现范围控制。
3、V = 255 * 当前点Point距中点距离的平方s1 / (顶点距中点的距离平方 *mSize)s2;
4、s1 有根据 ratio 修正 dx dy值。

for (int y = 0; y < heigh; y++)
	{
   
		uchar* imgP = img.ptr<uchar>(y);
		uchar* dstP = dst.ptr<uchar>(y);
		for (int x = 0; x < width; x++)
		{
   
			int b = imgP[3 * x];
			int g = imgP[3 * x + 1];
			int r = imgP[3 * x + 2];

			float dx = centerX - x;
			float dy = centerY - y;

			if (width > heigh)
				dx = (dx * ratio);
			else
				dy = (dy * ratio);
			int dstSq = dx * dx + dy * dy;
			float v = ((float
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值