1.均值滤波
含义:把每个像素都用周围的8个像素来做均值操作 。
均值滤波器有什么用处呢?
主要还是平滑图像的用处, 有的图像的锐度很高,用这样的均值算法,可以把锐度降低。使得图像看上去更加自然。(只能微弱的降低噪声,不能剔除噪声,对降噪几乎没用)
源码:
#include "highgui.h"
#include "cv.h"
void MeanFilter(uchar* smooth, int width, int height)
{
int sum = height * width * sizeof(uchar);//图像所占内存容量
uchar *corrupted = (uchar*)malloc(sum);
memcpy((char*)corrupted, (char*)smooth, sum);
for (int j = 1; j<height - 1; j++)
{
for (int i = 1; i<width - 1; i++)
{
smooth[j*width + i] = (corrupted[(j - 1)*width + (i - 1)] + corrupted[(j - 1)*width + i] + corrupted[(j - 1)*width + (i + 1)] +
corrupted[j*width + (i - 1)] + corrupted[j*width + i] + corrupted[j*width + (i + 1)] +
corrupted[(j + 1)*width + (i - 1)] + corrupted[(j + 1)*width + i] + corrupted[(j + 1)*width + (i + 1)]) / 9;
}
}
}
void imgOperate(IplImage* image)
{
cvNamedWindow("image-in", CV_WINDOW_AUTOSIZE);
cvNamedWindow("image-access", CV_WINDOW_AUTOSIZE);
cvNamedWindow("image-out", CV_WINDOW_AUTOSIZE);
cvShowImage("image-in", image);
//将色彩图像强制转化为灰度图像
IplImage* pGrayImg = NULL;
IplImage* pImg = NULL;
pGrayImg = cvCreateImage(cvGetSize(image), 8, 1);
pImg = cvCreateImage(cvGetSize(image), 8, 1);
cvCvtColor(image, pGrayImg, CV_RGB2GRAY);
//添加高斯噪声
cvZero(pImg);
CvRNG rng &#