均值滤波

学习DIP第1天

更多细节参考:

https://face2ai.com/DIP-1-1-不同灰度级的图像/

均值滤波,是比较简单的滤波方式,比较典型的是以3x3的模板对核心(或者称为锚点)的元素及其周围八个元素进行求和并除以元素个数(即9)得到的值将原值覆盖,基本的实现方法为四层循环,算法时间复杂度:

O(w*h*m*n)

        其中w,h为图像宽和长,m,n为模板宽和长。该算法有优化方法,将在以后的博文中讨论。

        代码使用OpenCV1.0编写,由于代码水平有限,望请见谅0.0

 

 

#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#define GETPIX(image,x,y) ((unsigned char) (image->imageData)[(x)*image->width+(y)])
#define SETPIX(image,x,y,value) (((image->imageData)[(x)*image->width+y])=((unsigned char)value))
void mean(IplImage *src,IplImage * dst,int kernel_size){
	unsigned int temp=0;
	for(int i=kernel_size/2;i<src->width-kernel_size/2;i++)
		for(int j=kernel_size/2;j<src->height-kernel_size/2;j++){
			temp=0;
			for(int m=-kernel_size/2;m<=kernel_size/2;m++)
				for(int n=-kernel_size/2;n<=kernel_size/2;n++)
					temp+=GETPIX(src,i+m,j+n);
			SETPIX(dst,i,j,(unsigned char)(temp/(kernel_size*kernel_size)));
		}


}
int main(){
	IplImage * image = cvLoadImage("e:\\OpenCV_Image\\lena.jpg",0);
	IplImage * test =cvCreateImage(cvSize(512,512),image->depth,1);
	mean(image,test,11);
	cvNamedWindow("SRC");
	cvNamedWindow("DST");
	cvShowImage("SRC",image);
	cvShowImage("DST",test);
	cvWaitKey();
	cvReleaseImage(&image);
	cvDestoryWindow("SRC");
        cvDestoryWindow("DST");

}

 

 

 

 

 

转载于:https://www.cnblogs.com/face2ai/p/9756724.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值