滤波算法(2)(最大值、最小值、低通、巴特沃斯、Robinson_Guard)

本文深入探讨了OpenCV库中的滤波算法,包括最大值滤波、最小值滤波、低通滤波以及巴特沃斯滤波。通过实例介绍了如何使用这些滤波器进行图像处理,以达到平滑图像、去除噪声的效果。同时,还提到了Robinson_Guard滤波器,它是对经典滤波器的一种改进。
摘要由CSDN通过智能技术生成

最大值滤波

void max_filter(Mat src, Mat dst,int kernalsize)
{
	int ksize;
	if (kernalsize % 2 == 0)
	{
		ksize = kernalsize / 2;
	}
	else
	{
		ksize = (kernalsize - 1) / 2;
	}
	if (kernalsize>src.rows || kernalsize>src.cols)
		cout << "核不合适" << endl;
	//最大值滤波操作
	for (int i = ksize; i < src.rows - ksize; i++)
	{
		for (int j = ksize; j <src.cols - ksize; j++)
		{
			int maxt = 0; //如果是最小值滤波则初始化maxt=255;
			for (int k = i - ksize; k <= i + ksize; k++)
				for (int m = j - ksize; m <= j + ksize; m++)
					if (maxt<src.at<uchar>(k, m))
						//如果是最小值滤波,小于号改成大于号就可
						maxt = src.at<uchar>(k, m);
			dst.at<uchar>(i, j) = maxt;
		}
	}
	
}

低通滤波

void ideal_Low_Pass_Filter(Mat src){
	Mat img;
	cvtColor(src, img, CV_BGR2GRAY);
	imshow("img", img);
	//调整图像加速傅里叶变换
	int M = getOptimalDFTSize(img.rows);
	int N = getOptimalDFTSize(img.cols);
	Mat padded;
	copyMakeBorder(img, padded, 0, M - img.rows, 0, N - img.cols, BORDER_CONSTANT, Scalar::all(0));
	//记录傅里叶变换的实部和虚部
	Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };
	Mat complexImg;
	merge(planes,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值