最大值滤波
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,