python手写均值滤波
本文实例为大家分享了python手写均值滤波的具体代码,供大家参考,具体内容如下
原理与卷积类似,设置一个n*n的滤波模板,滤波模板内的值累加除以模板的尺寸大小取平均为滤波后的值。
代码如下:
importcv2ascv importnumpyasnp #均值滤波 defmeansBlur(src,ksize): ''' :paramsrc:inputimage :paramksize:kernelsize :returndst:outputimage ''' dst=np.copy(src)#创建输出图像 kernel=np.ones((ksize,ksize))#卷积核 padding_num=int((ksize-1)/2)#需要补0 dst=np.pad(dst,(padding_num,padding_num),mode="constant",constant_values=0) w,h=dst.shape dst=np.copy(dst) foriinrange(padding_num,w-padding_num): forjinrange(padding_num,h-padding_num): dst[i,j]=np.sum(kernel*dst[i-padding_num:i+padding_num+1,j-padding_num:j+padding_num+1])\ //(ksize**2) dst=dst[padding_num:w-padding_num,padding_num:h-padding_num]#把操作完多余的0去除,保证尺寸一样大 returndst img_path=r"F:\03.png" img=cv.imread(img_path,0) dst=meansBlur(img,5) cv.imshow('src',img) cv.imshow('dst',dst) print(dst) cv.waitKey(0)
注释:红框表示两个for循环的范围,i-padding_num:i+padding_num+1表示第i行上移padding_num行,下移padding_num,+1是因为list列表为左闭右开区间,右边的元素取不到值。padding表示周围填充一圈。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。